2012-06-06 3 views
0

다음과 같은 시나리오가 있습니다.웹 서비스 클라이언트와 매핑 엔터티의 인터페이스

일부 엔티티 MyEntityDTO를 노출하는 WCF 서비스 (MyService)가 있습니다. 클라이언트 측에서는 클라이언트 측 구성 요소에 전달되는 IMyServiceClient 인터페이스를 작성하여 기본 구현에서 MyEntityDTO를 요청할 수 있습니다. 또한 이제 일부 MockedMyServiceClient : IMyServiceClient를 사용하여 클라이언트 측 유닛 테스트를 실행할 수 있습니다. 지금까지 좋은 것 같습니다.

이제 실제 MyRealWCFServiceClient : IMyServiceClient를 만들었습니다. IMyServiceClient는 기본적으로 Visual Studio에서 만든 WCF 서비스 참조를 둘러싼 것입니다.

한 가지 문제는 WCF 서비스 참조가 완전히 다른 MyEntityDTO를 반환하므로 서비스 참조 엔터티 형식에서 IMyServiceClient에서 반환되는 MyEntityDTO 형식으로 매핑해야한다는 것입니다. 나는 이것을 위해 AutoMapper를 사용할 수있다.

하지만 여기에 가장 큰 문제가 있습니다. 내 프로젝트의 일부 다른 응용 프로그램에서 MyRealWCFServiceClient를 재사용하고 싶습니다. 이러한 각 응용 프로그램에 자체 DTO 형식의 자체 WCF 서비스 참조가 있으면 현재 서비스 참조의 DTO 유형을 모두 전달하고 일부 일반적인 리플렉션을 사용하여 AutoMapper에 일반 형식을 삽입해야합니다. 무슨 엉망이 ...

하지만 공통 WCF 참조를 수집 할 수있는 MyRealWCFServiceClients는 공통된 라이브러리에서 MyRealWCFServiceClients를 래핑하므로 모든 MyRealWCFServiceClients는 알려진 일반적인 WCF 참조 만 사용합니다.

서비스 참조를위한 공통 라이브러리를 만드는 것이 좋습니다. 이것에 대한 더 나은 해결책이 있습니까?

+0

"WCF 서비스 참조가 완전히 다른 종류의 MyEntityDTO를 반환합니다"라는 것이 정확히 무엇을 의미합니까? MyEntityDTO가 VS 프록시 생성에 의해 생성 된 유형이 아닙니까? –

답변

1

공통 클라이언트를 만드는 경우이를 서비스 측에서 제공되는 배포 가능한 어셈블리로 만듭니다. 즉, 공통 클라이언트를 작성한 후 분배하십시오. 클라이언트 쪽에서 프록시를 빌드하지 마십시오.

DTO 구현을 포함하는 계약 어셈블리를 참조 할 수 있는지 여부에 따라 다른 프록시가 생성됩니다 (DTO의 경우). 그리고 VS를 사용하여 프록시를 빌드하면 프록시 생성기는 참조 된 원본 DataContracts를 사용할만큼 충분히 똑똑하며 새 프록시 클래스를 생성하지 않습니다.

그래서 두 가지 선택을 할 수 있습니다. 첫째, 공통 클라이언트 인 프로젝트를 만든 다음 배포하십시오. 그리고/또는 클라이언트 측을 생성하기 전에 계약 어셈블리 디렉토리를 참조하십시오.

희망이 도움이됩니다.

+0

오, 나는 클라이언트를 생성하기 전에 라이브러리를 참조하면 VS가 내 DTO를 찾을만큼 똑똑하다는 것을 알지 못했습니다. 덕분에 많은 도움이 될 것입니다. – JustAMartin