我已經能夠使用原型項目執行此操作,但因爲現在它將與項目中包含的其他內容一起進入「實施」,所以我在WCF方面存在一些問題能夠從MSMQ中接收消息。WCF綁定,合同,知識類型
解決方案的結構是我們有「團隊」。每個項目都代表了這一點(在某種程度上)。 團隊只能訪問他們需要的項目。
所以:
IncomingMessaging項目(引用「消息」項目)
這包含了從它自己的類型的基類派生具體類類(在「消息」項目)。基類都在「消息」項目中。示例:
FirstReport -> FirstReportBase
SecondReport -> SecondReportBase
ThirdReport -> ThirdReportBase
每個基類派生自「MainBase」。這也駐留在「消息」項目中。 MainBase已用KnownTypes屬性裝飾,並具有所有已知基類型。 (FirstReportBase,SecondReportBase等...)
然後我有一個WCFImplementation.Messages項目,其中引用「消息」和「IncomingMessaging」項目。 的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),但與原型工作之前,這是一個「鬆」型項目結構