2008-09-12 33 views
10

將WSDualHttpBinding用於雙工回調在真實世界的情況下工作?比方說,我有一個使用隨機端口的.NET應用程序,該服務能夠解析客戶端的基址和端口以進行回調嗎?WSDualHttpBinding雙工回調

回答

35

問題的完整答案取決於「真實世界的情景」是內聯網還是Internet方案。雖然WSDualHttpBinding工作在兩種情況下有具體需要注意的:

聯網

WSDualHttpBinding將使用預配置的自定義端口.NET應用程序在Intranet方案而努力「是」的服務將是能夠解析客戶端的基址和端口以進行回調:下面將詳細解釋。它在下面解釋的原因是WSDualHttpBinding主要設計爲通過Internet使用。

當您可以在客戶端和服務器上使用WCF時,Intranet方案中的雙工回調最好通過使用NetTcpBinding或NetNamedPipeBinding來實現。這些綁定分別使用TCP和ICP作爲傳輸(而不是HTTP)和自定義二進制編碼,這就是兩邊都需要WCF的原因。對於回撥給客戶端的回撥,用於通過綁定連接到服務的相同通道被重新使用,而不需要打開新的端口。

因特網

在因特網場景有效的HTTP請求和響應僅在一個方向上行進,HTTP被設計成一個單向協議。當使用WSDualHttpBinding時,WCF爲回調創建一個單獨的HTTP通道。在回答第二個問題時:默認情況下,回撥給客戶端的目標地址由客戶端主機名和端口80組成。如果客戶端是一臺開發機器並且安裝了IIS,則在某些情況下,端口80將被專門保留,這將與您的原型應用程序發生衝突。這就是this blog post爲ClientBaseAddress屬性提供的解決方案和幫助。無論您使用哪個端口 - 默認端口還是自定義端口,您都必須確保雙方所有防火牆和路由器配置正確,以允許建立出站通道和單獨的回叫通道。

.NET應用程序也可以表示Silverlight應用程序。由於在瀏覽器中運行的Silverlight應用程序無法接受新的傳入HTTP連接,因此WSDualHttpBinding與其分離的反向通道無效。因此,PollingDuplexHttpBinding首先在Silverlight 2中創建,它可以被認爲是一個聰明的'技巧',通過保持請求通道長時間打開(長輪詢)並將其用作反向通道來解決HTTP是單向的這一事實回撥給客戶。這在客戶端和服務器端都有很大的影響,特別與縮放有關,更多詳細信息請參見this post from my blog

根據您特定的「真實世界場景」和您的使用情況,希望這可以幫助您計算出用於雙面回調的正確綁定。

+0

非常豐富的+1 – 2014-03-21 11:15:59

2

如果是防火牆後面的應用程序,理論上是肯定的。這取決於你的「真實世界」是什麼意思;如果你的意思是「高性能」,也許NetTcpBinding是一個更好的方法。

相關問題