2011-03-22 27 views
1

我目前正在研究WCF-WSIT集成任務。我正在使用WCF和ws2007HttpBinding的WS-ReliableMessaging。WCF ReliableMessaging - 使用SessionId連接到現有的OperationContext

可靠的會話設置正確,我使用InstanceContextMode.PerSession,並且我的服務實例在一分鐘不活動後關閉。

我唯一擔心的是我不確定如何創建一個使用現有OperationContext的SessionId初始化的WCF代理。 Visual Studio生成的代理似乎不接受SessionId作爲構造函數等。

我希望能夠使用SessionId重新連接到活動服務,即使我的代理客戶端死了,我也不得不重新創建它。

回答

1

因爲我知道WCF中的可靠會話只有在客戶端和服務器都處於活動狀態時纔會生效。可靠的會話在通道級別上實現爲WS-ReliableMassaging,它提供了傳輸級別的可靠性 - 這意味着它可以處理丟失的消息,按順序傳遞,重新發送消息等。可靠性只是爲了克服不可靠的傳輸協議,如HTTP。

對於任何參與者都可以「死亡」或脫機的場景,您必須使用消息傳遞(MS世界中的MSMQ)。在與Java世界集成時,您可能需要基於JMS的其他消息傳遞平臺。

+0

感謝您的快速響應。我做了一些測試,你似乎是對的。 sessionId在頻道打開期間設置,無論我挖得多深,我都無法改變它。我在這裏嘗試解決的問題不是錯誤處理,它與會話管理有關。我希望我能夠斷開並重新連接我的客戶端與正在運行的服務。 – 2011-03-22 14:09:41

+0

看起來我的服務實例在我的客戶端斷開連接後仍然活着並且像無頭雞一樣運行,但是我的客戶端無法重新連接。我想我需要使用ASP會話或類似的東西來堅持服務狀態的狀態,這意味着解析和重新連接客戶端的cookie。 – 2011-03-22 14:10:38

+0

我很害怕這是不可能的。未處理的異常將終止服務部分,因此如果要與服務進行通信,則必須打開新的客戶端代理。 – 2011-03-22 14:11:57

1

可以使用經久耐用

http://www.wcftutorial.net/How-to-Create-Durable-Service.aspx http://blogs.microsoft.co.il/blogs/egady/archive/2008/01/05/wcf-3-5-durable-services.aspx

+0

我同意。堅持服務器端的狀態將解決會話管理問題。我會嘗試你提到的耐用服務例子。我認爲我的問題的結論是,基於wsHttp綁定的可靠消息和會話僅與通信會話有關;它不會涵蓋開箱即用的工作流程狀態和不連貫的客戶端場景。 – 2011-03-24 12:15:17