2010-01-10 2 views
5

두 웹 서비스가 있습니다. 하나는 사용자 기능이 있고 다른 하나는 관리 기능이 있습니다.WCF 및 여러 네임 스페이스 문제 - 여러 서비스 참조에서 개체 유형 공유

두 서비스를 효과적으로 예를 들어, 같은 개체 유형 작업 :

  • AdminService 고객이
  • UserService이 목록에 대한 기능을 제공하는 개체를 수정/삭제하는 기능을 제공합니다/읽기 고객은

객체 이제 클라이언트에는 Webservices.Admin과 Webservices.User라는 두 가지 서비스 참조가 있습니다.

CustomerService를 사용하여 Customer 객체를 검색하는 경우 UserService가 Webservices.User.Customer 유형의 객체를 검색하지만 AdminService는 Webservices.Admin.Customer 유형의 객체와 함께 작동하므로 AdminService를 통해 UserService를 조작 할 수 없습니다.

서버 쪽에서 두 유형 모두 동일하며 클라이언트의 다른 네임 스페이스에만 속합니다.

이제 질문 : 다른 서비스 참조에서 유형을 공유하려면 어떻게해야합니까?

답변

1

것은 당신이 통신의 양쪽 끝을 통제하고 있으며, 양쪽 끝은 .NET을 경우, 당신이 할 수 있습니다 :

  • 는 별도의 "계약으로 데이터 계약을 포함한 모든 계약을, 넣어 "조립
  • 참조하는 서버 측 구현 코드뿐만 아니라 어셈블리를 공유 서비스 참조를 추가 할 때

는 이렇게하면, WCF 찾아 사용하는 클라이언트 측 코드를 모두 조립하고, ne를 만들지 마라. w 유형을 지정합니다. 귀하의 경우, 당신은 오직 하나의 유형 Contracts.Customer 또는 당신이 상대하고있는 것만 가지고 있습니다.

이 경우 양쪽 모두를 제어하고 양쪽 끝에 .NET이 있으면 작동합니다! 그러나이 경우 서버와 클라이언트 수에 관계없이 계약, 특히 데이터 계약을 공유하는 좋은 방법입니다.

+0

예 모든 것을 제어합니다. 그러나 클라이언트가 실버 라이트이므로 계약 어셈블리를 공유 할 수 없습니다 (내 datacontracts는 Entity Framework에서 제공되기 때문에). 클라이언트가 silverlight를 제외한 다른 wcf 클라이언트 인 경우에도 작동합니다. –

+0

OK, Silverlight는 처음에 언급 했어야 할 중요한 포인트입니다. 그러나 EF에서 고객과 동일한 구조로 직렬화하고 별도의 어셈블리에 고정하고 모든 클라이언트 파트의 공통 어셈블리를 참조하는 형식을 포함하는 Silverlight 어셈블리를 만들 수 있어야합니다. –

+0

@marc_s Marc, 위에서 설명한 것과 동일한 문제가 있습니다. 그러나 Silverlight 어셈블리를 .NET 어셈블리와 동일한 구조로 serialize하는 방법에 대해 알고 싶습니다. 내 Silverlight 클라이언트에서 동일한 클래스를 사용하여 SL 어셈블리를 만들었지 만 작동하지 않는 것 같아서 잘못된 것으로 생각하고 있습니다. – stuartmclark

1

clientside (clientside는 .net 응용 프로그램이라고 가정)에서 WCF 프록시를 만들려면 slsvcutil을 사용하고, 객체를 포함하는 DLL을 참조하면 DLL의 동일한 객체를 전달하는 모든 끝점에 대해 사용됩니다.

시작에서

Visual Studio를 열고 명령 프롬프트 -> 비주얼 스튜디오 2008 -> 도구 ->

C와 유사한 비주얼 명령 프롬프트

고토 디렉토리 : \ 프로그램 파일 \은 Microsoft SDKs \ 실버 \ V3 .0 \ Tools

형 slsvcutil 및 구문 어디

slsvcutil http://somewcfservice:8080 /r:CommonLibrary.dll 

CommonLibrary을 따르십시오.DLL은 사업을 포함하는 DLL이 [편집] 프로젝트가 실버 프로젝트 클라이언트와 서비스 간의 유형을 공유하는 쉬운 방법이 있습니다