c# - Windows Azure VM 上的 WCF wsdualhttpbinding 绑定(bind)

标签 c# .net wcf azure

我们有一个在 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/");

请引用此链接 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 上关闭此行为,因此如果您的进程花费超过一分钟,回调 channel 将被负载均衡器关闭,并且您会收到超时异常。

关于c# - Windows Azure VM 上的 WCF wsdualhttpbinding 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19922710/

相关文章:

.net - 在 Entity Framework Code First 中将 Guid 属性映射到 Oracle

c# - C# 或 .NET 中最糟糕的陷阱是什么?

c# - 如何绑定(bind)网格行高?

c# - 如何使 WCF 服务服务器-客户端时差独立?

wcf - Windows 2008 R2 上的 netsh 错误

c# - 是否有可用于 .NET 的类似数据库的持久层?

c# - 如何在 for 循环中创建数组

wcf - 使用 WCF 进行大数据传输

c# - 将 Linq 子句添加到 Iqueryable 对象

c# - Visual Studio 2008 中类似 "if statements"的垂直线?