WCF wsdualhttpbinding绑定在Windows Azure VM上

时间:2013-11-12 06:51:28

标签: c# .net wcf azure

我们有一个在Windows服务上运行多个绑定的WCF应用程序,该应用程序在Intranet环境中按预期工作,但是当我们将解决方案部署到windows azure VM时,似乎我们所有的服务都运行良好,除了那些使用wsdualhttpbinding的服务捆绑 !!!

我们的服务在端口8099上运行,因此我们在VM上创建了一个端点,公共和私有端口设置为8099,我们暂时也禁用了防火墙。我们甚至尝试使用Azure网络建立一个指向站点VPN的点,但它们都没有工作。

我们将基地址设置为http://XXX.cloudapp.net:8099/MYSvc,但同样的问题...... 如果我在托管azure上的服务的同一台机器上运行客户端应用程序,这个解决方案工作正常,但是如果我尝试使用另一台机器则失败。我甚至尝试在同一个子网上创建另一个虚拟机,并在azure网络中运行客户端应用程序来复制内联网环境,再次没有成功......

此处没有错误复制,当客户端应用程序到达双工服务时,它会一直等待响应并且不允许用户执行任何操作!

是因为交通路由还是....任何建议?我们错过了什么吗? 我们更喜欢使用wsdualhttpbinding,除非没有解决方案...

1 个答案:

答案 0 :(得分:1)

由于没有人回答这个问题,并且由于我找到了解决方案的事实,我想在这里分享一下,以防有人需要它。

关于azure wsdualhttpbinding因路由问题无法找到客户端地址,因此即使您使用VPN,问题仍然存在。

解决方法是使用ClientBaseAddress和你的wsdualhttpbinding绑定一样:

WSDualHttpBinding dualBinding = new WSDualHttpBinding();
EndpointAddress endptadr = new EndpointAddress("http://XXX:12000/DuplexTestUsingCode/Server");
dualBinding.ClientBaseAddress = new Uri("http://XXX:8000/DuplexTestUsingCode/Client/");

参考此链接 http://msdn.microsoft.com/en-us/library/system.servicemodel.wsdualhttpbinding.clientbaseaddress(v=vs.110).aspx

并且在这里: http://social.msdn.microsoft.com/Forums/vstudio/en-US/e5fca7a5-9a90-48de-a81c-ec2e18b7ae6a/wsdualhttpbinding-and-clients-on-remote-machines

您必须记住,负载平衡器会在一分钟后关闭所有空闲连接。您无法在Azure上关闭此行为,因此如果您的进程需要超过一分钟,则负载均衡器将关闭回调通道,并且您将获得超时异常。