gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:44:33 25 4
gpt4 key购买 nike

仍在 WCF 学习曲线上:

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

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

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

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

最佳答案

WSDualHttpBinding 和大多数人连接到 Internet 的方式存在一个真正的问题 - 在路由器后面意味着,至少对于 IPv4,让 NAT 破坏聚会,正如您已经发现的那样.

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

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

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

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

切换到 NetTcpBinding 通常只需要更改配置 - 代码保持不变。它简单、快速、麻烦少得多,最重要的是 - 它就是好用。

关于c# - 使用 wsDualHttpBinding 通过 Internet 连接到 WCF 服务超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4526284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com