c# – 使用wsDualHttpBinding超时通过Internet连接到WCF服务
仍在WCF学习曲线上:
我已经设置了一个自托管的WCF服务(WSDualHttpBinding),它可以在我自己的计算机上运行,??该计算机位于防火墙后面.如果我在自己的计算机上运行客户端,一切都很好. 现在我将客户端安装在网络外的计算机上,我试图通过动态DNS访问该服务,如下所示:http://mydomain.dyndns.org:8000 / MyService.我的端口转发问题在previous question中得到了解决;我现在可以在浏览器中看到该服务已启动. 但是现在当我尝试在另一台机器上运行客户端时,我收到以下错误消息:“打开操作未在分配的超时00:01:00内完成.分配给此操作的时间可能是一部分更长的超时时间.“ 我已经禁用了服务的安全性,所以不是这样.还有什么可能阻止连接发生? 解决方法
WSDualHttpBinding存在一个真正的问题,以及大多数人连接到互联网的方式 – 正如你已经发现的那样,在路由器背后意味着,至少在IPv4中,NAT会破坏聚会.
使用WSDualHttpBinding,您有两个连接:从客户端到服务器,从服务器到客户端. 通常,客户端到服务器的连接并不是什么大问题 – 这就是通过互联网进行大多数通信的方式.在您的情况下,您似乎是在防火墙后面,并且您已打开/转发所需的端口.但这并不能解决第二次连接的问题 – 从服务器到客户端.基本上,第二个连接发生的是客户端充当服务器,服务器充当客户端.因此,您需要为连接到您的服务的每个客户端执行相同的端口打开/转发,因为它还充当服务器!这对您服务的每个用户来说当然是一个无理要求.这就是为什么WSDualHttpBinding更适合服务器到服务器的通信,其中设置是一次性的事情. 我建议您切换到NetTcpBinding,而不是尝试让WSDualHttpBinding工作.由于WSDualHttpBinding和NetTcpBinding都是仅WCF,仅限Microsoft的专有连接方案,因此您在互操作性方面的损失并不大.另一方面,你获得的是很多: > NetTcpBinding仅使用从客户端到服务器的单个连接,同时允许双向通信,如WSDualHttpBinding.因此,无需在客户端处理端口打开/转发 – NAT不是问题. 切换到NetTcpBinding通常只需要更改配置 – 代码保持不变.这很简单,速度很快,不那么麻烦,最重要的是 – 它只是起作用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |