我们有一个在 Windows 服务上运行的具有多个绑定(bind)的 WCF 应用程序,该应用程序在 Intranet 环境中按预期工作,但是当我们将解决方案部署到 Windows Azure VM 时,除了使用 wsdualhttpbinding 的服务之外,似乎所有服务都运行良好捆绑 !!!
我们的服务在端口 8099 上运行,因此我们在虚拟机上创建了一个端点,并将公共(public)和专用端口设置为 8099,我们还暂时禁用了防火墙。我们甚至尝试使用Azure网络建立点对点VPN,但都没有成功。
我们将基地址设置为http://XXX.cloudapp.net:8099/MYSvc但同样的问题... 如果我在 Azure 上托管服务的同一台计算机上运行客户端应用程序,则此解决方案工作正常,但如果我尝试使用另一台计算机,则会失败。我什至尝试在同一子网上创建另一个虚拟机,并从 azure 网络内运行客户端应用程序来复制 Intranet 环境,同样没有成功...
这里没有复制错误,似乎当客户端应用程序到达双工服务时,它会一直等待响应并且不允许用户执行任何操作!
是因为流量路由还是......有什么建议吗?我们错过了什么吗? 除非没有解决方案,否则我们更喜欢使用 wsdualhttpbinding...
最佳答案
由于没有人回答这个问题,并且由于我找到了解决方案,我想在这里分享它,以防有人需要。
在 azure wsdualhttpbinding 上,由于路由问题而无法找到客户端地址,因此即使您使用 VPN,问题仍然存在。
解决方案是使用 ClientBaseAddress 作为您的 wsdualhttpbinding 绑定(bind),如下所示:
WSDualHttpBinding dualBinding = new WSDualHttpBinding();
EndpointAddress endptadr = new EndpointAddress("http://XXX:12000/DuplexTestUsingCode/Server");
dualBinding.ClientBaseAddress = new Uri("http://XXX:8000/DuplexTestUsingCode/Client/");
您必须记住,负载均衡器会在一分钟后关闭所有空闲连接。您无法在 Azure 上关闭此行为,因此如果您的进程花费超过一分钟,回调 channel 将被负载均衡器关闭,并且您会收到超时异常。
关于c# - Windows Azure VM 上的 WCF wsdualhttpbinding 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19922710/