我有一个 GUI 客户端,它针对作为服务器盒上的 Windows 服务托管的WCF服务运行。WCF 服务在 PerCall InstanceContextMode 中运行,并且客户端有一个服务客户端的单例实例,我想避免在每次调用时重新实例化单例,因为这让我的许多异步调用变得困难。
我的问题是,在 Windows 服务重新启动后,每次客户端调用它都会收到如下异常消息:
此通道不能再用于发送消息,因为输出会话由于服务器启动的关闭而自动关闭。通过将 DispatchRuntime.AutomaticInputSessionShutdown 设置为 false 来禁用自动关闭,或者考虑使用远程服务器修改关闭协议。
解决这个问题的最佳方法是什么?我可以在对服务客户端的所有调用周围放置 try-catch 子句,并在通信异常时重新实例化单例实例,但这将涉及大量样板代码。