Dot-Net
WCF通過防火牆推送到客戶端?
我需要通過客戶端防火牆將推送技術與 WCF 一起使用。這一定是一個常見的問題,我知道它在理論上是有效的(見下面的連結),但我沒能讓它工作,我也找不到展示它的程式碼範例。
要求:
- WCF
- 客戶端通過 tcp 埠 80 (netTcpBinding) 連接到伺服器。
- 伺服器以不規則的時間間隔(1 分鐘到幾個小時)推送資訊。
- 使用者不必配置他們的防火牆,伺服器推送必須通過所有入站埠關閉的防火牆。為此需要同一連接上的 TCP 雙工,雙重綁定不起作用,因為必須在客戶端防火牆上打開埠。
- 客戶端定期(可能每 15 分鐘)向伺服器發送心跳,因此伺服器知道客戶端仍然活著。
- 伺服器是帶有 WAS 的 IIS7。
解決方案似乎是雙工 netTcpBinding。基於此資訊:
但是我還沒有找到有效的程式碼範例。我嘗試將 Microsoft 的 WCF 範例中的“Duplex”和“TcpActivation”範例組合在一起,但沒有任何運氣。請有人指點我可以工作的範常式式碼,或建構一個小型範例應用程序。非常感謝!
我找到了幾個解決方案:
帶有商業選項的ZeroC Ice GPL。只測試過很快。看起來比 .NET Remoting 更強大,並且開發得非常積極。
RemObjects Commercial,積極開發,支持一切,但似乎沒有 GenuineChannels 使用的所有更高級的功能。
正版頻道。它使用帶有許多不錯的附加功能的遠端處理,最重要的是它通過 NAT 工作而無需打開客戶端防火牆。不幸的是,似乎已經很死了。
另一種解決方案是在 IIS 中使用流式傳輸,根據這篇文章:在 IIS 中保持連接打開
客戶端在埠 80 處與伺服器建立第一個連接(使用 IIS6 的 http,使用 IIS7 的 tcp),然後連接保持打開狀態,並帶有永不結束的流式響應。
我沒有時間對此進行試驗,也沒有找到說明它專門解決了防火牆問題的範例,但這裡有一個可能有效的優秀範例:Streaming XML。