2008-08-22 63 views
7

又見How does a WCF server inform a WCF client about changes? (Better solution then simple polling, e.g. Coment or long polling)WCF通過防火牆推送到客戶端?

我需要通過客戶端的防火牆使用推技術與WCF。這肯定是一個常見的問題,我知道它在理論上是有效的(參見下面的鏈接),但是我沒有得到它的工作,並且我還沒有找到能夠證明它的代碼示例。

要求:

  • WCF
  • 客戶端連接到服務器通過TCP端口80(NetTcpBinding的)。
  • 服務器以不規則間隔(1分鐘到幾個小時)推回信息。
  • 用戶不應該配置防火牆,服務器推送必須通過所有入站端口關閉的防火牆。爲此,需要在同一連接上使用TCP雙工,因爲必須在客戶端防火牆上打開端口,所以雙重綁定不起作用。
  • 客戶端定期向服務器發送心跳信號(可能每隔15分鐘),以便服務器知道客戶端仍然活着。
  • 服務器是IIS7與WAS。

該解決方案似乎是雙工netTcpBinding。基於這樣的信息:

WCF through firewalls and NATs

Keeping connections open in IIS

但我還沒有找到一個代碼示例工程..我試着從微軟的WCF採樣結合的「雙面」和「TcpActivation」樣本沒有任何運氣。請有人指點我的示例代碼,或者構建一個小示例應用程序。非常感謝!

+1

你遇到任何異常?究竟是什麼不工作? – jrista 2009-10-23 01:05:29

回答

3

我發現了幾個解決方案:

ZeroC Ice GPL與商業選擇。只有快速測試。看起來比.NET Remoting更強大,並且非常積極地開發。

RemObjects商業化的,積極的開發,支持一切,但似乎沒有GenuineChannels使用的所有更高級的功能。

GenuineChannels。它使用遠程處理以及許多不錯的附加功能,其中最重要的功能是通過NAT工作,而無需打開客戶端防火牆。不幸的是似乎已經死了。

另一種解決方案是使用與IIS流,根據此文章:Keeping connections open in IIS

客戶端發出在端口80中的第一連接(HTTP與IIS6,TCP與IIS7)到服務器,該連接然後保持以永不停止的流式響應打開。

我還沒有時間來嘗試這個,我還沒有找到一個說明它明確解決防火牆問題的示例,但下面是一個很好的示例,可能適用於:Streaming XML

+0

當您在IIS上保持連接打開時,您必須非常小心 - 您可以用盡工作線程(並且速度很快)。我建議你閱讀IAsyncHttpHandler - 以及如何從WCF獲得相同的功能。最壞的情況下你可能不得不進行民意調查 – 2009-06-04 18:37:47

1

在大多數防火牆設置中,如果TCP連接閒置以節約資源,則TCP連接將被防火牆拆除。空閒超時可能不是您可以控制的。如果他們閒置並且正在打擊資源限制,有些人會把他們推倒。

大多數公司的環境不允許任何機器建立一個出站TCP連接。

此外,使用這種機制意味着你將有縮放問題。我認爲更可靠的解決方案是排隊信息,讓您的客戶定期輪詢。如果可能的話,儘量使用緩存,以便後續客戶端輪詢將從客戶代理緩存中獲取緩存數據(如果使用的話)。

如果你不得不在亞秒級土地(即金融服務)及時推送數據,那麼在客戶端考慮一些消息基礎設施,如NServiceBus分銷商,但這將需要客戶安裝...

所以你有沒有嘗試過使用Toredo?讀過它會出現在那裏,這對於用戶來說設置太複雜了。

1

我還沒有嘗試過你提到的情況,所以我不能太多的幫助,對不起。如果您只需繞過客戶端防火牆,則可能需要檢出this post

祝你好運。

2

您是否嘗試過尋找:http://www.codeproject.com/KB/WCF/WCF_Duplex_UI_Threads.aspx

你能提供什麼,你已經嘗試的例子嗎?有了防火牆等的詳細信息,錯誤消息?

如果客戶端和服務器都可以直接尋址並且防火牆不是問題,您是否考慮允許客戶端註冊提供支持合同的URL?服務器隨後可以在需要時調用此服務,而無需建立長時間運行(但大多數情況下爲空閒連接),避免需要跳動心跳,並且可以在會話\連接之間進行恢復。

+0

是的,它不能通過防火牆。 – Sire 2009-06-04 17:45:33

1

你試過這個嗎? DuplexHttpBinding

它使用封裝爲自定義WCF綁定的智能輪詢技術。所以它應該可以開箱即用。

-1

您可以在啓用防火牆的客戶端上訪問客戶端以訪問雙工Web服務進行以下更改。

  • 集WebHttp選項防火牆檢查 - >高級 - >設置(網絡連接設置) - > Web服務器(HTTP)
+0

在客戶防火牆中進行更改不是一種選擇。而且他們可能有一個硬件防火牆,在這種情況下,它仍然會失敗。 – Sire 2010-03-23 14:48:20