2010-03-17 38 views
1

我需要一些幫助來解決我面臨的與桌面客戶端與IIS上託管的WCF服務通信時遇到的問題。

我想要在我的測試情況下,要做到:
當客戶端有多個IP地址時發生WCF服務問題

  1. 服務器通過其中包含提供其回調的URI舉辦WSDualHttpBinding服務
  2. 客戶端建立連接(通話記錄方法)本客戶端的IP地址
  3. 建立連接後,客戶端應用程序會啓動網頁。用戶在文本框中鍵入一些文本,然後單擊發送。網頁將文本發送給所有註冊的桌面客戶端。

問題:

在步驟2中,PC可以有多個IP地址(以太網適配器,環回適配器等)。如果在註冊呼叫期間,來自該列表的IP在回叫URL中發送,而該回叫URL不能從服務器回叫(例如回送適配器IP),則會引發超時異常。經過幾次這樣的嘗試後,服務器不能再接受來自客戶端的呼叫(無論是否有效的IP或其他)。有時會引發「服務器太忙」異常。

(由於DNS/WINS配置問題導致服務器無法將計算機名解析爲正確的IP地址,我無法在回調函數中使用機器的完全限定名稱)。

如何重現:
a。在IIS上發佈服務器。從具有多個IP地址的不同機器上執行客戶端。客戶端在3次嘗試後拋出超時異常和程序退出 b。 App.Config中的參數允許輸入正確的IP地址(要使用的IP)。現在,如果程序啓動,一切正常。
c。如果我刪除上面指定的IP地址,以便使用不正確的IP,則再次執行步驟a。在此模式下運行程序2-3次。 d。按照步驟b進行更改並運行程序。有時我會遇到超時異常。其他時間,網站出現。但是,當輸入併發送文本時,它不會發送到客戶端。 (即使Web服務沒有收到任何呼叫,註冊方法仍然有效發送功能失敗,因爲在Web服務上沒有註冊客戶端

我不確定爲什麼發生這種情況以及如何解決它。我的Visual Studio解決方案 - http://bit.ly/atKfOS

高度讚賞任何投入,評論 環境:服務器 - 的Windows XP(IIS 5.0),在Windows Server 2008 SP2的x64(IIS 7),客戶端:Windows XP中

感謝 GC

回答

0

嗯,我猜主要的問題是:當服務器試圖回到客戶端並失敗時,兩者之間的通道將變成「故障」,並且變得毫無用處。

發生這樣的事件後,您必須處理客戶端代理並重新創建它 - 或者在服務器上正常處理超時異常(捕獲它,將其變爲SOAP錯誤,記錄它 - 不管 - 只是不要讓未過濾的.NET TimeoutException傳遞迴客戶端,這會使通道出錯。

當你發生這樣的TimeoutException時,你在服務器端做了什麼?你一定不要把這個例外一直吹到頻道?

+0

謝謝marc_s。我將應用您的建議和報告。 在服務器端,當發送消息時發生任何異常時,會引發Faulted事件。該服務通過從已註冊的客戶端列表中刪除此客戶端並將客戶端設置爲空來處理此問題。 – 2010-03-17 17:14:11

+0

你是對的馬克。我現在按預期部署了客戶端代理和其工作。我錯誤地認爲在程序結束時它會被關閉。 謝謝! – 2010-03-17 19:40:31