2014-09-05 2 views
0

서비스 오류가 발생합니다 :일반 인수 속성은 WebService에에

enter image description here 오류 :

오류가 ChainedListNode<T>이있는 유형이다. 문제는 내가 DataMemberAttributeValue에서 제거하면 서비스가 작동한다는 것입니다.

[DataContract] 
public class ChainedListNode<T> 
{ 
    [DataMember] 
    public T Value { get; set; } 
} 

어떤 아이디어가 원인일까요? 어떻게 해결할 수 있습니까?

+0

http://jeffbarnes.net/blog/post/2007/05/10/WCF-Serialization-and-Generics.aspx가 도움이 될 수 있습니까? –

답변

0

개방형 ChainedListNode<T>의 type 매개 변수는 ChainedListNode<T>.Value에 아무 것도 포함 할 수 없다는 것을 의미합니다. WCF는 Value 속성에 배치 할 수있는 모든 가능한 값을 설명하는 계약을 만들 수 없으므로 전체 형식을 거부합니다. Value 속성이 없으면 형식 매개 변수 T은 관련이없고 무시되며 모든 항목이 정상적으로 작동합니다. 관련 당신이 필요한 경우

[DataContract] 
public class ChainedListNodeOfString : ChainedListNode<string> 
{ 
    [DataMember] 
    public string Value { get; set; } 
} 

, 당신은 파생 유형을 만들 수 있습니다 (그리고 :

는 비슷한 상황에서 나는 내 제네릭 형식에서 파생 된 밀폐형를 만든 내 데이터 계약으로 유형을 사용 OperationContract)를 반환해야합니다. 이렇게하면 API가 더 자세하게 표시되지만 작동합니다.

0

WCF에서 사용하기 좋은 일반 아이디어라고 생각하지 않습니다.이 경우에는 좋은 직렬화가 나타나지 않기 때문에, 가능하다 할지라도 가능합니다. 결국에는 오류가 발생할 수 있다고 생각합니다.

DataMember를 제거 할 때 작동하는 이유는 이론적으로 직렬화되지 않아서 백업 된 서비스에서만 사용되지 않기 때문입니다.