2012-06-02 2 views
1

프로토 타입 프로젝트를 사용하여이 작업을 수행 할 수 있었지만 프로젝트에 포함 된 다른 작업과 함께 "구현"되기 때문에 WCF와 관련하여 몇 가지 문제가 있습니다. MSMQ에서 메시지를 가져올 수 있습니다.WCF 바인딩, 계약서, 노턴 타입

솔루션은 "팀"으로 구성됩니다. 각 프로젝트는 이것을 (어느 정도까지) 나타냅니다. 팀은 필요한 프로젝트에만 액세스 할 수 있습니다.

그래서 :

이 자체 유형의 기본 클래스에서 파생 된 구체적인 클래스 클래스를 포함

IncomingMessaging 프로젝트 (참조 "메시지"프로젝트)

(에서 "메시지"프로젝트). 기본 클래스는 모두 "메시지"프로젝트에 있습니다. 예 :

FirstReport -> FirstReportBase 
SecondReport -> SecondReportBase 
ThirdReport -> ThirdReportBase 

각 기본 클래스는 "MainBase"에서 파생됩니다. 이것은 또한 "Messages"프로젝트에 상주합니다. MainBase는 KnownTypes 속성으로 장식되었으며 모든 기본 알려진 유형을가집니다. (FirstReportBase, SecondReportBase 등 ...)

"메시지"및 "IncomingMessaging"프로젝트를 참조하는 WCFImplementation.Messages 프로젝트가 있습니다. WCFImplementation.Messages 프로젝트는 WCF는 실제 구현과 같이 MSMQ 바인딩에 사용되는 콘크리트 클래스가 있습니다

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)] 
public class InboundMessagingService : IInboundMessagingService 
{ 
    [OperationBehavior(TransactionScopeRequired = true)] 
    public void ProcessIncomingMessage(MsmqMessage<MainBase> msg) { ... } 
} 

IInboundMessagingService도의 ServiceContract 특성을 가지고 있으며이있는 ServiceKnownType 모든 기본 유형

을 속성

나와 함께 지금까지?

그런 다음 서비스를 호스팅하는 간단한 콘솔 앱 프로젝트가 있습니다. 이 시점에서 FirstReport 메시지를 대기열로 보냈습니다.

FirstReport fr = new FirstReport(....); 

콘솔 앱이 실행되고 오류가있는 서비스가 표시됩니다. 대기열에서 메시지를 읽을 수 없습니다! (포이즌 메시지)

나는 무엇이 누락 되었습니까? IInboundMessagingService의 인터페이스를 구체적인 클래스로 꾸며야합니까? 기본 클래스 만 사용할 수 있습니까?

은 내가 콘크리트 (FirstReport)와 인터페이스의 서비스 알려진 유형으로 장식 된 기본 클래스 (FirstReportBase)하지만, 모두가 그것을 전에 프로토 타입 작업있어이는 "느슨한"유형의 프로젝트 구조

답변

0
했다

문제는 개체 및 하위 개체 등이 모두 DataContract 특성으로 표시되어야하는 것으로 보입니다. 그러면 기본 concrete/base class에는이 기본 클래스의 서브 클래스 인 알려진 유형으로 장식 된 knowntypes 속성이 있어야합니다.