我们有几个使用负载均衡器的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,但这并没有解决我们的问题。
有什么想法吗?
答案 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 /主机头/等)来获得更多的快乐。