我需要一些帮助来解决我面临的桌面客户端与托管在 IIS 上的 WCF 服务的通信问题。
我在测试用例中尝试做的事情:
- 服务器托管 WSDualHttpBinding 服务
- 客户端通过提供包含客户端 IP 地址的回调 uri 来建立与此的连接(调用注册方法)
- 一旦建立连接,客户端应用程序就会启动一个网页。用户在文本框中键入一些文本并单击发送。网页将文本发送到所有注册的桌面客户端。
问题:
在第 2 步中,PC 可能有多个 IP 地址(以太网适配器、环回适配器等)。如果在注册调用期间,在回调 url 中发送了来自该列表的 IP,而无法从服务器回调(例如环回适配器 IP),则会引发超时异常。经过几次这样的尝试,服务器不再接受来自客户端的调用(无论是有效 IP 还是其他)。有时会抛出“服务器太忙”异常。
(由于 DNS/WINS 配置问题导致服务器无法将机器名称解析为正确的 IP 地址,我无法在回调 uri 中使用机器的完全限定名称)。
如何重现
:在 IIS 上发布服务器。从具有多个 IP 地址的不同计算机上执行客户端。客户端抛出超时异常,程序在 3 次尝试后退出 b. App.Config 中的参数允许输入正确的 IP 地址(要使用的 IP)。现在,如果程序启动,一切正常。
C。如果我删除了上面指定的这个 IP 地址,从而使用了不正确的 IP,则会再次发生步骤 a。在此模式下运行程序 2-3 次。
d。按照步骤 b 进行更改并运行程序。有时我会遇到超时异常。其他时候,网站会出现。但是,当输入和发送文本时,它不会到达客户端。(即使 Web 服务没有收到任何调用,注册方法仍然有效。发送功能失败,因为 Web 服务上没有注册客户端。
我不确定为什么会发生这种情况以及如何解决它。这是我的 Visual Studio 解决方案 - http://bit.ly/atKfOS
非常感谢任何投入、评论。环境:服务器 - Windows XP (IIS 5)、Windows Server 2008 SP2 x64 (IIS 7)、客户端:Windows XP
谢谢 GC