我需要一些帮助来解决我面临的问题,桌面客户端与IIS上托管的WCF服务进行通信。
在我的测试用例中我想做什么:
问题:
在步骤2中,PC可以具有多个IP地址(以太网适配器,环回适配器等)。如果在注册调用期间,来自该列表的IP在回调URL中被发送,该回调URL不能从服务器回叫(例如,回送适配器IP),则抛出超时异常。经过一些此类尝试后,服务器无法再接受来自客户端的呼叫(无论是否为有效IP)。有时会抛出“服务器太忙”的异常。
(由于DNS / WINS配置问题导致服务器无法将计算机名称解析为正确的IP地址,我无法在回调uri中使用计算机的完全限定名称。)
如何重现:
一个。在IIS上发布服务器。从具有多个IP地址的其他计算机,执行客户端。客户端在3次尝试后抛出超时异常和程序退出
湾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
答案 0 :(得分:0)
嗯,我猜主要的问题是:当服务器试图回调客户端并且失败时,两者之间的通道将变为“出现故障”,并且变得无用。
发生这样的事件后,你必须处理客户端代理,并重新创建它 - 或者优雅地处理服务器上的超时异常(捕获它,将其转换为SOAP错误,记录它 - 无论如何 - 只是'不要' t让未经过滤的.NET TimeoutException传回客户端,这将使通道出错。
当发生这样的TimeoutException时,你在服务器端做什么?你确定不要把这个异常一直冒泡到通道吗?