2011-04-05 112 views
2

異步方法調用期間檢測連接失敗我有一個異步WCF服務實現,我想在客戶端中止一個WCF方法調用中的連接來檢測。在WCF服務

基本上,這就是我想要的:

  1. 客戶端調用WCF方法
  2. 服務器開始處理異步
  3. 客戶中止連接請求(或無論什麼原因,連接失敗)
  4. 服務器應通知客戶端中止連接

這可能嗎?

這是一個長輪詢實現。或者,服務器可以確保客戶端成功接收到響應?如果沒有,則應爲下一個輪詢請求保存響應。

+0

我假設你正在使用TCP。 TCP實際上沒有一種方法來判斷「另一方」是否仍然存在,而不是週期性地發送「保持活着」消息。一些建立在TCP之上的協議可以做到這一點,但不是原始的TCP,恕我直言。 – 2011-04-06 08:58:43

+0

然而,我認爲服務器可以判斷客戶端是否收到響應,因爲TCP可以檢測到客戶端發送的確認。 – 2011-04-06 09:01:50

回答

2

我不知道有任何可靠的方式知道客戶端連接與否。請參閱thisthisthis

建議的一些替代方法是使用雙工信道或使用隊列。一個基於隊列的解決方案可以讓服務器發送隊列響應,客戶端從隊列中選擇響應。隊列可以在MSMQ,DB,Azure中實現。

感謝

+0

根據我的經驗,對於這種類型的消息交換模式最可靠和最容易實現的解決方案是@Chandermani建議的基於MSMQ的選項。 – 2011-04-05 16:51:14

+0

MSMQ不是一種選擇,因爲我將擁有Linux客戶端。我想我會重新設計我的系統,考慮到這個限制。 – lzm 2011-04-06 14:48:12

0

您可以設置的,而不是客戶端,其中保持聯繫,等待一個答案輪詢的解決方案,它使請求,並立即斷開。然後,如果請求已完成或尚未完成,則每隔X秒重新連接以輪詢。

在服務器上,如果你沒有看到X * 2秒客戶調查,然後事情發生到客戶端,你應該中止請求。

使這項工作將需要在服務器上一些額外的基礎設施,以跟蹤哪些請求是活躍的,當你最後一次見到客戶,很遺憾。