2

只是想弄清楚当 WCF 出现问题时会发生什么。我有一个使用 PerSession 的 InstanceContextMode 声明的服务合同的实现......

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

调用发生如下:

  1. 我的客户端调用服务器并调用 GetServerUTC() 以返回服务器的当前 UTC 时间。这是一种单向调用,服务器将在客户端准备好时回调客户端(在这种情况下简单地返回当前时间!)

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

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

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

    obj.Faulted += new EventHandler(EventService_Faulted);

问题...

  • 这会终止服务器上当前连接的会话吗?

  • 我想我可以在这种方法中自由地做我想做的事情,例如日志记录或其他东西,但是我应该在这里做任何特定的事情来终止会话还是 WCF 会处理这个?

从最佳实践的角度来看,当回调出错时我应该怎么做?这是否意味着“您的客户发生了某些事情”并且这就是结束还是我在这里遗漏了什么?

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

我已经阅读了很多关于 WCF 的内容,但对于出现问题时该怎么做似乎有点模糊。目前我正在我的客户端上实现一个状态机,它将管理连接并确定用户操作是否会发生,这取决于是否存在与服务器的连接 - 或者这是否是矫枉过正。

任何提示将不胜感激;)

4

1 回答 1

0

我发现会话将根据您的会话设置超时。奇怪的是,我注意到一旦出现故障,客户端仍然能够在同一会话中调用其他方法。

于 2010-03-31T15:15:38.963 回答