试着了解WCF出现问题时可能发生的事情。我有一个使用PerSession的InstanceContextMode声明的服务合同的实现...
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)]
调用如下:
我的客户端调用服务器并调用GetServerUTC()以返回服务器的当前UTC时间。这是单向调用,服务器将在准备就绪时调用客户端(在这种情况下简单地返回当前时间!)
服务器回调客户端,为了测试目的,在客户端的回调实现中,我抛出异常。
这在客户端未经处理(用于测试目的),客户端崩溃并关闭。
在服务器上,我处理ICommunicationObject上的故障事件处理程序......
obj.Faulted + = new EventHandler(EventService_Faulted);
...问题
这会终止服务器上当前连接的会话。
我认为我可以自由地在这种方法中做我想做的事,例如记录或其他什么,但我应该做什么具体的终止会话或WCF处理这个?
从最佳实践角度来看,当回调出现故障时,我该怎么办?这是否意味着“你的客户发生了什么事情”,那就结束了,或者我在这里遗失了什么?
此外,我是否应该处理任何其他故障处理程序。
我已经在WCF上做了很多阅读,但在出现问题时该怎么办似乎有点模糊。目前我正在我的客户端上实现一个状态机,它将管理连接并确定用户操作是否可能发生取决于服务器是否存在连接 - 或者这是否过度。
任何提示都非常赞赏;)
答案 0 :(得分:0)
我发现会话会根据会话的设置超时。奇怪的是,我注意到一旦出现故障,客户端仍然可以在同一会话中调用其他方法。