WCF의 해시 세트
-
20-08-2019 - |
문제
WCF 인터페이스에서 해시 세트를 사용하고 있습니다
[ServiceContract]
public interface IwcfServerSync
{
[OperationContract]
void Test(HashSet<int> someHashSet);
}
서비스 참조를 만들 때 해시 세트는 int []로 바뀝니다.
ServiceKnownType를 추가했습니다.
[ServiceKnownType(typeof(System.Collections.Generic.HashSet<int>))]
그리고 일부 구성을 시도했지만 변경할 수 없었습니다.
내가 하드 코딩 된 모든 것이 효과가 있지만, 내 참조를 업데이트 할 때마다 변경하는 것은 정말 성가신 일입니다.
나는 아마도 뭔가 잘못하고있는 것, 어떤 포인터 나 아이디어를하고 있습니까?
해결책
컬렉션은 전선을 넘어갈 때 단순화됩니다. IDE 및 명령 줄을 통해 수집 유형을 지정할 수 있습니다 (svcutil /collectionType
), 그러나 그것은 적용됩니다 모두 API 컬렉션. 나는 당신이 그것을 받아들이고 코드를 통한 불일치를 처리해야한다고 생각합니다. 궁극적으로 와이어에서 컬렉션은 XML (적어도 표준 바인딩을 통해)입니다.
<items>
<item ...>...</item>
<item ...>...</item>
<item ...>...</item>
</items>
- 따라서 배열 사이 (스키마에서)를 알 수없는 이유 (T[]
), ㅏ List<T>
, ㅏ HashSet<T>
, a MyFunkyCollection<T>
.
어셈블리 공유를 사용하는 경우 (예 : 동일한 서비스 계약 조립이 클라이언트에 있습니다. 그리고 서버) 그러면 이것은 일어나지 않을 것입니다. 그러나 그것은 SOA/MEX의 의도를 물리칩니다. 그러나 IS는 상당히 많이 사용되는 접근법입니다. 따라서 IDE는 직접 지원하고 스위치를 통해 명령 줄을 지원합니다 (svcutil /reference
).
IDE를 지원하는 경우 ... 클래스 라이브러리 (DLL)에 서비스 계약 및 데이터 계약을 작성한 다음 두 프로젝트 ( 서버 프로젝트 및 클라이언트 프로젝트). 이제 추가하십시오 서비스 참조 클라이언트 프로젝트에서 서버 엔드 포인트 (.SVC)까지. vs2008을 사용하는 경우 유형에 대한 로컬 참조를 자동으로 확인하고 프록시 생성 대신에 사용하는 것 - 의미 : 클라이언트 코드를 사용합니다. IwcfServerSync
이미 사용 여부를 알고있는 클래스 라이브러리에서 HashSet<T>
등.