2011-07-07 233 views
1

我在Windows服务上托管了简单的WCF服务。如何检查WCF客户端通道(服务)是否终止?

当wcf服务的客户端空闲10分钟或更长时间WCF服务终止在客户端[不在服务器端,服务器服务仍然活着],我有虚幻的超时错误。

我不想增加超时时间。我只是想知道是否有一种精巧的方法来知道服务是否在客户端终止?[API是否提供此信息?]然后如果会话终止,我将创建一个新的。

祝福

PS:在客户端我检查WCFClientChannel->Sate == CommunicationState::Faulted,这不工作

回答

1

不幸的是,只有这样,才能知道代理是不再可用是试图使用它。

实际发生的是您正在使用的绑定是sessionful(比如说NetTcpBinding或WSHttpBinding),服务为其维护客户端连接的资源。如果客户端未在服务的receiveTimeout中指定的时间内与服务通话(默认为10分钟),则服务器将决定客户端未返回并抛出客户端的服务器端资源。

现在,当客户端回来,并说:“嘿了我再”服务器说:“我不知道你在说什么”和故障呼叫从而杀死客户端代理

因此,作为已经决定服务器端,有没有办法让客户端会知道,除非它试图去跟服务

你可以做以下之一:

  1. 增加receiveTimeout在服务器上(但只是让它 需要更长的时间ee值问题)
  2. 用的结合,是不是sessionful(说basicHttpBinding的)
  3. 有被客户端调用每隔几 分钟,让服务知道它仍然存在
+0

一个“ping”操作感谢Richard Blewett.Bad新闻:没有办法知道代理不再可用是尝试使用它。 – Novalis

相关问题