我通過消息總線擴展WCF傳輸,請求 - 答覆模式對我來說效果很好。當我實現輸入輸出模式時,遇到了一個問題。情況是:如果它是IsOneWay = true,則不會調用WCF服務代碼
1,我創建了InputChannel和OutputChannel,並讓TransportBindingElement返回它們。
2,我創建了一個契約接口,它有兩種方法。一個具有IsOneWay = true的屬性,假設它是Method1;另一個不是名爲Method2的。 3,如果我調用Method1,我可以看到它給了我一個RequestChannel和ReplyChannel,而不是InputChannel和OutputChannel。回覆通道可以接收WCF消息並返回RequestContext。但服務代碼未被調用。
4,如果我在Method1上設置了IsOneWay = false,它工作得很好。
4,如果我調用了Method2,它運行良好。
5,我創建了另一個服務合約,它只有一個IsOneWay = true的方法。如果我調用了這個方法,WCF給了我InputChannel和OutputChannel,並且它運行良好(服務代碼執行)。所以我的問題是: 1,如果我有一個與IsOneWay = true方法和IsOneWay = false方法的服務,WCF會給我請求 - 回覆通道,這是正確的嗎?
2,我該如何處理服務調用,該方法是IsOneWay = true,但在同一服務合約中也有IsOneWay = false方法?
順便說一句,我注意到,對於IsOneWay = true方法的請求消息,MessageID爲NULL。我爲請求消息設置了新的ID,但沒有運氣,服務代碼仍未被調用。
是的,在實踐中,最好的辦法是隻爲請求回覆提供服務,而另一種服務僅限於一種方式。但是你知道我正在實現一個定製的傳輸層,這意味着我最好支持各種服務實現和主機。如果WCF允許用戶在一個服務中有請求回覆和單向請求,我應該支持它,儘管這不是最好的方式。 – 2012-02-20 09:22:10
已更新我的回答 – 2012-02-20 10:07:24
謝謝休,但我沒有實施路由服務。實際上,我試圖擴展WCF以使用企業消息總線作爲傳輸層。因此,我的擴展應該能夠讓開發人員在我的交通工具上運行各種服務。如果可以在一個服務合同中定義IsOneWay = true和false,我必須支持它。我認爲內置傳輸,如HTTP,NET.TCP和MSMQ都應該支持。 – 2012-02-21 01:00:50