2010-05-25 4 views
15

wcf 서비스에서 일반 메서드를 사용하려면 어떻게해야합니까? WCF. 서비스 일반 메서드

는이 코드 작성 :

[OperationContract] 
void AddItem<T>(T item); 

을하지만, 나는 다음과 같은 오류가 나타납니다

Type 'T' cannot be exported as a schema type because it is an open generic type. You can only export a generic type if all its generic parameter types are actual types.

답변

28

당신은 간단하게 할 수 없습니다입니다. 비누가 이것을 지원하지 않기 때문에 그렇게 할 수 없습니다. WFC 조작을 호출하기 전에 오브젝트를 호출하고 캐스트하는 중간 로컬 오브젝트를 작성하여 제네릭을 처리하는 방법에 대해 언급 한 article을 참조하십시오.

6

이렇게하면 안됩니다. SOAP 가능 웹 서비스에서 클라이언트는 프록시를 생성 할 수 있도록 WSDL이 게시 될 때 모든 유형을 알아야합니다. Generics는 단순히 SOAP 사양에 존재하지 않습니다. SOAP은 상호 운용이 가능하며 모든 언어로 제네릭이 존재하지 않습니다.

1

다른 모든 것들은 이미 언급했듯이 WCF와 SOAP은 이것을 지원하지 않습니다. 문제는 클라이언트와 서버간에 앞뒤로 전달되는 모든 것이 XML 스키마 문서에서 표현 가능해야한다는 것입니다.

XML 스키마는 string, int, datetime과 같은 모든 일반적인 원자 유형을 지원하며 이러한 원자 유형으로 구성된 복합 유형을 지원하며 상속을 지원합니다.

그러나 XML 스키마는 generics를 지원하지 않으므로 WCF와 SOAP를 통해 교환하는 모든 것이 일반화 될 수 없습니다. 구체적이지 않은 제네릭 형식 만 사용해야합니다.

나는이 문제를 해결할 방법을 모른다. 그것은 한계이며 당신은 지금 그것으로 살아야합니다.

0

오류는 열린 형식이 허용되지 않는다고 말합니다. 아마도 허용되는 것은 다음과 같습니다 :

물론, 모든 상속 된 유형은 KnownType 특성으로 추가되어야합니다. 데이터 계약에

+2

을 계약 운수 나쁘게. 여전히 개방형 제네릭 유형이라는 것에 대해 불평하고 있습니다. – Sam

1

제한된 일반적인 유형은 사용할 수 있지만 서비스 계약의 유형 매개 변수를 specfied해야하며, 유효 데이터로 지정된 유형의 매개 변수로 작동하는 것처럼하지 않습니다 난 그냥 수행 한 테스트에서