Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何检查WCF客户端通道(服务)是否终止?_C++_Wcf_Wcf Client - Fatal编程技术网

C++ 如何检查WCF客户端通道(服务)是否终止?

C++ 如何检查WCF客户端通道(服务)是否终止?,c++,wcf,wcf-client,C++,Wcf,Wcf Client,我在Windows服务上托管了简单的WCF服务 当wcf服务的客户端空闲10分钟或更长时间时,wcf服务在客户端终止[不在服务器端,服务器服务仍处于活动状态],我收到famaous超时错误 我不想增加超时时间。我只是想知道是否有一种很长的方法可以知道服务是否在客户端终止?[API是否提供此信息?]然后如果会话终止,我将创建一个新的 祝福 Ps:在客户端,我检查了WCFClientChannel->Sate==CommunicationState::Faulted,但这不起作用不幸的是,知道代理不

我在Windows服务上托管了简单的WCF服务

当wcf服务的客户端空闲10分钟或更长时间时,wcf服务在客户端终止[不在服务器端,服务器服务仍处于活动状态],我收到famaous超时错误

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

祝福


Ps:在客户端,我检查了
WCFClientChannel->Sate==CommunicationState::Faulted
,但这不起作用

不幸的是,知道代理不再可用的唯一方法是尝试使用它

实际发生的情况是,您正在使用一个绑定(比如NetTcpBinding或WSHttpBinding),服务为该绑定维护客户端连接的资源。如果客户机在服务的receiveTimeout中指定的时间内(默认为10分钟)没有与服务通信,那么服务器会决定客户机不会回来,并丢弃客户机的服务器端资源

现在,当客户机返回并说“嘿,又是我了”时,服务器会说“我不知道你在说什么”,然后错误地调用,从而杀死客户机代理

因此,由于决策是在服务器端做出的,因此除非客户机尝试与服务对话,否则客户机无法知道

您可以执行以下操作之一:

  • 增加服务器上的receiveTimeout(但这只会使 需要更长的时间才能看到问题)
  • 使用非会话的绑定(例如BasicHttpBinding)
  • 有一个“ping”操作,客户端每隔几天就会调用一次 几分钟让服务人员知道它还在那里

  • 不幸的是,知道代理不再可用的唯一方法是尝试使用它

    实际发生的情况是,您正在使用一个绑定(比如NetTcpBinding或WSHttpBinding),服务为该绑定维护客户端连接的资源。如果客户机在服务的receiveTimeout中指定的时间内(默认为10分钟)没有与服务通信,那么服务器会决定客户机不会回来,并丢弃客户机的服务器端资源

    现在,当客户机返回并说“嘿,又是我了”时,服务器会说“我不知道你在说什么”,然后错误地调用,从而杀死客户机代理

    因此,由于决策是在服务器端做出的,因此除非客户机尝试与服务对话,否则客户机无法知道

    您可以执行以下操作之一:

  • 增加服务器上的receiveTimeout(但这只会使 需要更长的时间才能看到问题)
  • 使用非会话的绑定(例如BasicHttpBinding)
  • 有一个“ping”操作,客户端每隔几天就会调用一次 几分钟让服务人员知道它还在那里

  • 谢谢Richard Blewett。坏消息:没有办法知道代理不再可用就是尝试使用它。谢谢Richard Blewett。坏消息:没有办法知道代理不再可用就是尝试使用它。