2008-11-04 94 views
4

我們有幾臺使用負載均衡器的Web服務器。機器正在端口81上運行IIS6。從外部看,站點可通過端口80訪問。機器的外部名稱和名稱不同。負載均衡器後面的WCF - 如何設置

我們得到的web.config

System.ServiceModel.EndpointNotFoundException: The message with To '<url>' cannot be processed at the receiver, due to an AddressFilter mismatch at the EndpointDispatcher. Check that the sender and receiver's EndpointAddresses agree. 

相關部分:

<endpoint binding="ws2007HttpBinding" bindingConfiguration="MyServiceBinding" 
    contract="MyService.IMyService" listenUriMode="Explicit" /> 

我們嘗試添加listenUri,但並沒有解決我們的問題。

任何想法?

回答

6
[ServiceBehavior(AddressFilterMode=AddressFilterMode.Any)] 

將該屬性置於服務上解決了該問題。

+0

關於這些問題的更詳細的討論位於這裏http://stackoverflow.com/questions/274984/wcf-webservice-behind-public-reverse-proxy/947276#947276 – 2011-07-29 19:08:37

1

什麼是具體的負載平衡器?使用F5 BIG-IP,我們可以很容易地工作,但我們在nlb上使用相同的端口和(相對)uri作爲單獨的機器(因此,如果我們選擇,我們可以將單個機器視爲農場)。很顯然,每臺機器都有不同的名稱,但是這種設置還允許您通過欺騙主機來測試單個服務器 - 例如,編輯您的HOSTS文件以將[您的服務器場名稱]指向[測試服務器IP]。

我們最大的痛苦是SSL;使用TransportWithMessageCredential安全性,WCF拒絕入站http連接 - 所以我們必須設置nlb以在nlb和服務器節點之間重新加密 - 但不是一個大問題。

我們唯一的其他問題是在IIS中託管WCF,而WCF無法通過http(但通過https處理)正確識別預期的站點(儘管IIS很好)。爲了解決這個問題,我寫了一個自定義工廠,它完全忽略了http(僅在https上監聽) - 它無論如何都與TransportWithMessageCredential需求巧妙地結合在一起,所以我不會爲此煩惱。

我想知道如果你不通過標準端口託管,而是作爲一個不同的站點(IP /主機頭/等)來獲得更多的喜悅。