2009-05-10 2 views
3

에 내 WCF 인터페이스는 WCF

[ServiceContract] 
public interface IwcfServerSync 
{ 
    [OperationContract] 
    void Test(HashSet<int> someHashSet); 
} 

에 HashSet에 사용하고 있습니다.

은 내가 ServiceKnownType 추가 :

[ServiceKnownType(typeof(System.Collections.Generic.HashSet<int>))] 

을 일부 구성을 시도했지만 확실히 그것은 변경 만들 수 없습니다.

내가이 모든 작품 하드 코딩 변경하지만 그것을마다 갱신 내 참조를 변경할 정말 짜증나 경우 ... 난 아마 뭔가 잘못하고 있어요

, 어떤 포인터 또는 아이디어?

+0

' ... –

답변

4

컬렉션이 전선 위로 이동하면 단순화됩니다. IDE 및 명령 행 (svcutil /collectionType)을 통해 콜렉션 유형을 지정할 수 있지만 API의 콜렉션 모두 에 적용됩니다. 나는 그것을 받아 들여야하고, 코드를 통해 불일치를 처리해야한다고 생각한다. 궁극적으로, 와이어, 컬렉션 그냥 XML이다 (표준 바인딩을 통해 적어도) - 같은 :

<items> 
    <item ...>...</item> 
    <item ...>...</item> 
    <item ...>...</item> 
</items> 

이 - 따라서 왜 배열 (T[]) 사이 (스키마에서) 말할 수 없다, List<T>, HashSet<T>MyFunkyCollection<T>이있다.

주 당신이 조립 공유를 사용하는 경우 (즉, 동일한 서비스 계약 어셈블리가 클라이언트 서버에 있습니다) 다음이 일어나지 않을 것입니다 -하지만이 SOA/MEX의 의도를 패배. 그러나 접근법은 상당히 많이 사용되었습니다. 따라서 IDE는 스위치를 통해 직접 명령 줄을 지원합니다 (svcutil /reference). IDE의


는 클래스 라이브러리 (DLL)에서 서비스 계약 및 데이터 계약을 작성하는 경우 ... 그것을 지원하고 어셈블리 참조를 추가 (즉, DLL 참조 또는 프로젝트 참조)이에 라이브러리 (서버 프로젝트와 클라이언트 프로젝트)의 두 프로젝트 이제 서비스 참조을 클라이언트 프로젝트에서 서버 끝점 (.svc)에 추가하십시오. VS2008을 사용하는 경우 자동으로 유형에 대한 로컬 참조를 확인하고 프록시 생성 대신 사용합니다. 즉, 클라이언트 코드는 HashSet<T> 등을 사용할지 여부를 이미 알고있는 IwcfServerSync을 사용합니다.

+0

답장을 보내 주셔서 감사합니다. 동료로부터 "코드를 통해 불일치를 처리하십시오"라는 메시지가 나타납니다. 더 나은 솔루션이 있는지 알고 싶었습니다. 실제로는 상관 없습니다. 서비스 계약이 공유 어셈블리에 있고, 나는 리모팅에서 전환했고 클라이언트는 인터페이스를 알고있다. (게임을 만들고 그것들 사이에 객체를 움직일 필요가있다. IDE가 지원하는 위치를 찾을 수 없습니다. –

+0

오오 .. 그렇습니다. 인터페이스를 사용해야하지만 IDE가 여전히 인터페이스를 만들고 프록시를 구현하는 데 사용합니다. 무엇이 이번에 그리웠습니까? –

+0

이상하다 ... "지정된 참조 된 어셈블리의 재사용 유형"목록에 클래스 라이브러리를 추가 할 수 있습니까? http://blogs.microsoft.co.il/blogs/kolbis/archive/2008/06/08/reusing-types-in-wcf.aspx –