负载均衡器后面的WCF - 如何设置

时间:2008-11-04 10:32:30

标签: .net wcf wcf-binding

我们有几个使用负载均衡器的Web服务器。机器在端口81上运行IIS6。在外部,可以使用端口80访问站点。外部名称和机器名称不同。

我们正在

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.

web.config的相关部分是:

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

我们尝试添加listenUri,但这并没有解决我们的问题。

有什么想法吗?

2 个答案:

答案 0 :(得分:6)

[ServiceBehavior(AddressFilterMode=AddressFilterMode.Any)]

将此属性置于服务上可以解决问题。

答案 1 :(得分:1)

具体负载均衡器是什么?使用F5 BIG-IP,我们可以很容易地使用它,但我们在nlb上使用相同的端口和(相对)uri作为单独的机器(因此,如果我们选择,我们可以将单个机器视为与农场相同)。显然,每台机器都有不同的名称,但此设置还允许您通过欺骗主机来测试单个服务器 - 例如,通过编辑HOSTS文件将[您的服务器场名称]指向[测试服务器IP]。

我们最大的痛苦是SSL;使用TransportWithMessageCredential安全性,WCF拒绝入站http连接 - 所以我们必须设置nlb以在nlb和服务器节点之间重新加密 - 但不是一个大问题。

我们唯一的另一个问题是在IIS中托管WCF,并且WCF无法通过http正确识别目标站点(尽管IIS很好)(但在https上很好)。为了解决这个问题,我编写了一个完全忽略http的自定义工厂(仅在https上监听) - 无论如何都与TransportWithMessageCredential要求完全相关,所以我并不为此烦恼。

我想知道你是不是通过在标准端口上托管而是作为一个不同的站点(IP /主机头/等)来获得更多的快乐。