2010-05-18 2 views
7

ServiceContract를 조롱하고 싶습니다. 문제는 Moq (및 Castle Dynamic-Proxy)가 인터페이스의 속성을 Wcf가 좋아하지 않는 동적 프록시로 복사한다는 것입니다. Wcf는 다음과 같이 말합니다. ServiceContractAttribute는 인터페이스 또는 구현 중 하나에서만 정의해야하며 두 가지 모두에서 정의해서는 안됩니다.Wcf ServiceContract 조롱

예외 : InvalidOperationException - Castle.Proxies.IWorkOrderRequestServiceProxy 유형의 서비스 클래스는 모두 ServiceContract를 정의하고 IWorkOrderRequestService 유형에서 ServiceContract를 상속합니다. 계약 상속은 인터페이스 유형에서만 사용할 수 있습니다. 클래스에 ServiceContractAttribute가 표시되어 있으면 ServiceContractAttribute가있는 계층 구조의 유일한 유형이어야합니다. IWorkOrderRequestService 유형의 ServiceContractAttribute를 IworkOrderRequestService 유형이 구현하는 별도의 인터페이스로 이동하는 것을 고려하십시오.

답변

21

솔루션에 대해 동일한 문제가 발생했습니다. :-)

업데이트 : http://code.google.com/p/moq/source/browse/trunk/Source/Proxy/CastleProxyFactory.cs은 AttributesToAvoidReplicating이라는 속성 (컬렉션)에 대한 참조를 포함하고 있으며, Moq 소스 코드를 살펴볼 수있는 곳과 같습니다.

업데이트 # 2 : Nailed it!

추가 :

Castle.DynamicProxy.Generators.AttributesToAvoidReplicating.Add (대해서 typeof (ServiceContractAttribute를));

커널에 어떤 것도 연결하기 전에.