2010-03-17 37 views
1

我需要一些帮助来解决我面临的与桌面客户端与IIS上托管的WCF服务通信时遇到的问题。

我想要在我的测试情况下,要做到:
当客户端有多个IP地址时发生WCF服务问题

  1. 服务器通过其中包含提供其回调的URI举办WSDualHttpBinding服务
  2. 客户端建立连接(通话记录方法)本客户端的IP地址
  3. 建立连接后,客户端应用程序会启动网页。用户在文本框中键入一些文本,然后单击发送。网页将文本发送给所有注册的桌面客户端。

问题:

在步骤2中,PC可以有多个IP地址(以太网适配器,环回适配器等)。如果在注册呼叫期间,来自该列表的IP在回叫URL中发送,而该回叫URL不能从服务器回叫(例如回送适配器IP),则会引发超时异常。经过几次这样的尝试后,服务器不能再接受来自客户端的呼叫(无论是否有效的IP或其他)。有时会引发“服务器太忙”异常。

(由于DNS/WINS配置问题导致服务器无法将计算机名解析为正确的IP地址,我无法在回调函数中使用机器的完全限定名称)。

如何重现:
a。在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.0),在Windows Server 2008 SP2的x64(IIS 7),客户端:Windows XP中

感谢 GC

回答

0

嗯,我猜主要的问题是:当服务器试图回到客户端并失败时,两者之间的通道将变成“故障”,并且变得毫无用处。

发生这样的事件后,您必须处理客户端代理并重新创建它 - 或者在服务器上正常处理超时异常(捕获它,将其变为SOAP错误,记录它 - 不管 - 只是不要让未过滤的.NET TimeoutException传递回客户端,这会使通道出错。

当你发生这样的TimeoutException时,你在服务器端做了什么?你一定不要把这个例外一直吹到频道?

+0

谢谢marc_s。我将应用您的建议和报告。 在服务器端,当发送消息时发生任何异常时,会引发Faulted事件。该服务通过从已注册的客户端列表中删除此客户端并将客户端设置为空来处理此问题。 – 2010-03-17 17:14:11

+0

你是对的马克。我现在按预期部署了客户端代理和其工作。我错误地认为在程序结束时它会被关闭。 谢谢! – 2010-03-17 19:40:31