2012-06-02 64 views
1

我已經能夠使用原型項目執行此操作,但因爲現在它將與項目中包含的其他內容一起進入「實施」,所以我在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),但與原型工作之前,這是一個「鬆」型項目結構

回答

0

問題似乎是對象和子對象等都需要使用DataContract屬性進行標記。 然後,主要的具體/基類應該具有用已知類型修飾的知識類型屬性,這些類型是該基類的子類。