2010-09-22 53 views
2

我在IIS中设置了WCF Silverlight(3)Http双工服务。直到我回收IIS中的ApplicationPool时,它工作得非常好。WCF用IIS AppPool回收的双工服务问题

然后调用此双工服务方法的连接的SL客户端开始从Web服务获取TimeoutExceptions/CommunicationExceptions。增加客户端的超时并不能提供帮助。

回收似乎不会终止服务器和客户端之间的基础(双工)http连接。 当客户端随后调用此服务的方法时,IIS无法正确处理它。

如果我在客户端上重新创建代理,一切都可以正常工作。问题是,我怎么知道我需要重新建立到服务器的连接呢? 不是 网络上的所有示例仅显示如何处理断开连接的客户端,但不显示如何处理Web服务已被回收的情况。完全重启IIS是可以的,因为在这种情况下http连接是关闭的。

任何输入,非常感谢。

+0

我会推荐使用自主托管任何严重的WCF工作,甚至更适合双工场景。自己托管一个WCF服务真的不那么难,然后你不依赖像AppPools那样随意回收的东西...... – 2010-09-22 20:30:41

回答

1

它是预期的行为。这是双工http如何工作。双工http通信使用可靠会话。这意味着一切都运作良好,直到一方关闭。如果AppPool被回收,则运行服务实例被终止。下一次客户端尝试与服务进行通信时,它无法访问它(实例已不存在),但由于可靠会话,它尝试多次,然后抛出超时。超时之后的唯一解决方案是中止当前代理,创建新的客户端代理并启动新的双工通信。

+2

是的,我得出了同样的结论。我们现在只是捕捉客户端上的异常并重新建立连接。 – 2010-09-27 18:49:32