프로토 타입 프로젝트를 사용하여이 작업을 수행 할 수 있었지만 프로젝트에 포함 된 다른 작업과 함께 "구현"되기 때문에 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)하지만, 모두가 그것을 전에 프로토 타입 작업있어이는 "느슨한"유형의 프로젝트 구조