2009-06-04 2 views
1

Entity Framework에서 데이터를 가져 오는 몇 가지 WCF 서비스를 작성 중이며 다음 도메인 기반 디자인 패턴에서 집계 당 리포지토리가 있습니다. 구체적인 예는 질문과 답변 모음입니다. QuestionRepository와 AnswerRepository가 있습니다.서비스간에 동일한 DataContract 사용

QuestionRepository에서 AnswerRepository로 항목을 전달할 때 문제가 발생합니다. 두 서비스 모두 동일한 데이터 모델에 기반을두고 있으므로 동일한 논리적 항목을 사용하지만 svcutil은이를 두 개의 다른 네임 스페이스에두고 완전히 다른 서비스로 취급합니다.

이 문제를 해결할 수있는 방법이 있습니까? 동일한 서비스에서 두 개의 ServiceContract를 호스팅 할 수 있습니까? WCF가 다른 서비스에서 생성 된 데이터 계약을 재사용하도록 할 수 있습니까?

덕분에, 로이

답변

2

두 개의 개별 서비스 인 IQuestionService와 IAnswerService에서 공통된 DataContract를 사용할 수 있어야합니다.

당신은 전선의 양쪽 끝을 소유하고 있습니까? 클라이언트와 서버 모두? 둘 다. NET/WCF? 이 경우 예를 들어 DataContract와 모든 공통 인터페이스를 하나의 별도 어셈블리에 배치하고 서버와 클라이언트 둘 다에서이 두 어셈블리를 공유 할 수 있습니다.

클라이언트에서 svcutil을 실행하면 지정된 공통 어셈블리의 유형을 사용하도록 알릴 수 있습니다. 이 아닌이라고 말하면 QuestionAnswer 데이터 형식을 다시 작성하지만 어셈블리의 데이터 형식을 사용하십시오. svcutil의 /reference (또는 /r) 매개 변수를 확인하십시오.

svcutil (your WSDL) /r (your common assembly here) ...... 

또는 다른 옵션은 proxy을 사용하여 다음 모두 함께는 svcutil 건너 뛰고 등 자신을 당신의 ChannelFactory에를 생성하고 클라이언트에 수동으로 100 %의 인스턴스, 서비스 참조 등

ChannelFactory<IQuestion> cFac = 
    new ChannelFactory<IQuestion>("ConfigName"); 
IQuestion proxy = cFac.CreateChannel(); 

없이하는 것 현재 svcutil에 의해 생성 된 것과 같은 객체.

물론 와이어의 양쪽 끝을 소유 한 경우에만 작동합니다.

마크

0

내가 당신을 도울 수있는 한 가지는 당신이 직렬화의 이름과 네임 스페이스를 지정하자 DataContractAttribute 클래스를 살펴하는 것이라고 생각합니다.

그렇다면 동일한 논리 항목을 사용하는 경우 서비스간에 호환 가능해야합니다.

모두 MEX 끝 점이 생성하는 WSDL에 따라 다릅니다.

관련 문제