繁体   English   中英

使用wsDualHttpBinding超时通过Internet连接到WCF服务

[英]Connecting over internet to WCF service using wsDualHttpBinding times out

仍在WCF学习曲线上:

我已经设置了一个自托管的WCF服务(WSDualHttpBinding),它可以在我自己的计算机上运行,​​该计算机位于防火墙后面。 如果我在自己的计算机上运行客户端,一切都很好。

现在我将客户端安装在网络外的计算机上,我试图通过动态DNS访问该服务,如下所示: http://mydomain.dyndns.org:8000/MyServicehttp://mydomain.dyndns.org:8000/MyServicehttp://mydomain.dyndns.org:8000/MyService 我的端口转发问题在前一个问题中得到了解决 ; 我现在可以在浏览器中看到该服务已启动。

但是现在当我尝试在另一台机器上运行客户端时,我收到以下错误消息:“打开操作未在分配的超时00:01:00内完成。分配给此操作的时间可能是一部分更长的超时时间。“

我已经禁用了服务的安全性,所以不是这样。 还有什么可能阻止连接发生?

WSDualHttpBinding存在一个真正的问题,也就是大多数人连接到互联网的方式 - 正如你已经发现的那样,在路由器背后意味着,至少在IPv4中,NAT会破坏聚会。

使用WSDualHttpBinding ,您有两个连接:从客户端到服务器,从服务器到客户端。

通常,客户端到服务器的连接并不是什么大问题 - 这就是通过互联网进行大多数通信的方式。 在您的情况下,您似乎是在防火墙后面,并且您已打开/转发所需的端口。 但这并没有解决第二次连接的问题 - 从服务器到客户端。 基本上,第二个连接发生的是客户端充当服务器,服务器充当客户端。 因此,您需要为连接到您的服务的每个客户端执行相同的端口打开/转发,因为它还充当服务器! 这对您服务的每个用户来说当然是一种无理要求。 这就是为什么WSDualHttpBinding更适合服务器到服务器的通信,其中设置是一次性的事情。

我建议您切换到NetTcpBinding ,而不是尝试让WSDualHttpBinding工作。 由于WSDualHttpBindingNetTcpBinding都是仅WCF,仅限Microsoft的专有连接方案,因此您在互操作性方面的损失并不大。 另一方面,你获得的是很多:

  1. NetTcpBinding仅使用从客户端到服务器的单个连接,同时允许双向通信,如WSDualHttpBinding 因此,无需在客户端处理端口打开/转发 - NAT不是问题。
  2. 通信协议是二进制的,比WSDualHttpBinding使用的纯文本XML更紧凑。 较少的数据传输意味着更好的服务。
  3. 使用NetTcpBinding ,您可以立即获得客户端断开连接的通知,因为套接字已关闭。 无需像使用WSDualHttpBinding一样等待HTTP超时。
  4. 单个连接意味着没有任何东西可以不同步 - 使用WSDualHttpBinding ,两个连接中的一个可能会丢弃而另一个可能仍处于活动状态,只有一种通信方式。 WCF有办法解决这个问题,但最好先避开这个问题。

切换到NetTcpBinding通常只需要更改配置 - 代码保持不变。 这很简单,速度很快,不那么麻烦,最重要的是 - 它只是起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM