2010-03-14 63 views
2

只是試圖讓我的頭在WCF出現問題時會發生什麼。我有PerSession的InstanceContextMode宣佈我的服務合同的執行...WCF回調失敗 - 會話會發生什麼?

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)] 

的通話發生如下:

  1. 我的客戶端調用服務器並調用GetServerUTC()返回服務器的當前UTC時間。這是一種單向呼叫,當服務器準備就緒時(在本例中簡單地返回當前時間,服務器將返回客戶端)

  2. 服務器回撥給客戶端並用於回調實現中的測試目的在客戶端上,我拋出一個異常。

  3. 這在客戶端未處理(出於測試目的)並且客戶端崩潰並關閉。

  4. 在我處理的ICommunicationObject發生故障的事件處理程序服務器...

    obj.Faulted + =新的EventHandler(EventService_Faulted);

問題...

  • 這會殺死對服務器上的當前連接的會話。

  • 我認爲我可以自由地做我想要的方法,例如日誌記錄或其他內容,但是我應該做什麼特定的事情來終止會話,或者WCF會處理這個事情嗎?

從最佳實踐角度來看,當回調出現故障時該怎麼辦?這是否意味着「你的客戶發生了什麼事情」,這是否結束呢,還是有我在這裏失蹤的東西?

此外,是否還有其他任何我應該處理的故障處理程序。

我在WCF上做了大量的閱讀,似乎有點模糊當出現問題時該怎麼辦。目前,我正在我的客戶端上實現一臺狀態機,它將管理連接,並根據服務器是否存在連接來確定用戶操作是否可以發生 - 或者這種矯枉過正。

任何提示將真的讚賞;)

回答

0

我發現,本次會議將超時,按您的會話設置。奇怪的是,我注意到一旦發生故障,客戶端仍然可以在同一個會話中調用其他方法。

+0

這是非常糟糕的做法,因爲它可能會非常快地耗盡您的服務器會話限制。您應該在客戶端中止通道。 – Alex 2010-03-31 15:20:04