2010-03-14 65 views
2

只是试图让我的头在WCF出现问题时会发生什么。我有PerSession的InstanceContextMode宣布我的服务合同的执行...WCF回调失败 - 会话会发生什么?

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)] 

的通话发生如下:

  1. 我的客户端调用服务器并调用GetServerUTC()返回服务器的当前UTC时间。这是一种单向呼叫,当服务器准备就绪时(在本例中简单地返回当前时间,服务器将返回客户端)

  2. 服务器回拨给客户端并用于回调实现中的测试目的在客户端上,我抛出一个异常。

  3. 这在客户端未处理(出于测试目的)并且客户端崩溃并关闭。

  4. 在我处理的ICommunicationObject发生故障的事件处理程序服务器...

    obj.Faulted + =新的EventHandler(EventService_Faulted);

问题...

  • 这会杀死对服务器上的当前连接的会话。

  • 我认为我可以自由地做我想要的方法,例如日志记录或其他内容,但是我应该做什么特定的事情来终止会话,或者WCF会处理这个事情吗?

从最佳实践角度来看,当回调出现故障时该怎么办?这是否意味着“你的客户发生了什么事情”,这是否结束呢,还是有我在这里失踪的东西?

此外,是否还有其他任何我应该处理的故障处理程序。

我在WCF上做了大量的阅读,似乎有点模糊当出现问题时该怎么办。目前,我正在我的客户端上实现一台状态机,它将管理连接,并根据服务器是否存在连接来确定用户操作是否可以发生 - 或者这种矫枉过正。

任何提示将真的赞赏;)

回答

0

我发现,本次会议将超时,按您的会话设置。奇怪的是,我注意到一旦发生故障,客户端仍然可以在同一个会话中调用其他方法。

+0

这是非常糟糕的做法,因为它可能会非常快地耗尽您的服务器会话限制。您应该在客户端中止通道。 – Alex 2010-03-31 15:20:04