在客户端处理WCF服务重新启动

时间:2009-12-31 12:27:16

标签: wcf exception-handling protocolexception

我有一个GUI客户端,它运行在服务器盒上作为Windows服务托管的WCF服务。 WCF服务在PerCall InstanceContextMode中运行,并且客户端有一个服务客户端的单例实例,我想避免在每次调用时重新实例化单例,因为它使我的许多异步调用变得困难。

对我来说,问题是,在重新启动Windows服务之后,每次客户端进行调用时都会收到如下异常消息:

  

由于服务器启动的关闭,输出会话自动关闭,因此该通道不能再用于发送消息。通过将DispatchRuntime.AutomaticInputSessionShutdown设置为false来禁用自动关闭,或者考虑使用远程服务器修改关闭协议。

解决这个问题的最佳方法是什么?我可以在服务客户端的所有调用周围放置try-catch子句,并在通信异常上重新实例化单例实例,但这将涉及大量的样板代码..

2 个答案:

答案 0 :(得分:9)

最好的方法是尽量避免服务器上的异常。如果WCF服务器遇到未被捕获和处理的异常,它将“错误”通道,使其无效。

在服务器端,您可以实现IErrorHandler interface并捕获.NET异常,将它们转换为SOAP错误,这些错误将更优雅地传回客户端,而不会导致通道错误。

这样,您可以捕获服务器上的所有.NET异常,并将它们转换为可互操作的SOAP错误,这些错误不会导致这些问题。

有关详细信息,请参阅:

答案 1 :(得分:0)

您可以看一下这可能会避免一些样板代码:

http://wcfproxygenerator.codeplex.com