我在Windows服务上托管了简单的WCF服务。
当wcf服务的客户端空闲10分钟或更长时间时,WCF服务在客户端[不是在服务器端终止,服务器服务仍然存在]终止,并且出现了超时错误。
我不想增加超时时间。我只是想知道有没有一种愚蠢的方法来知道服务是否在客户端终止?[API是否提供此信息?]然后,如果 session 终止,我将创建一个新的 session 。
最好的祝愿
附:在客户端我检查了WCFClientChannel->Sate == CommunicationState::Faulted
,这不起作用
最佳答案
不幸的是,知道代理不再可用的唯一方法是尝试使用它。
实际情况是,您正在使用sessionful(例如NetTcpBinding或WSHttpBinding)绑定(bind),服务会为其保留客户端连接资源。如果客户端在服务的receiveTimeout中指定的时间(默认为10分钟)内未与服务进行对话,则服务器将确定客户端不回来,并丢弃客户端的服务器端资源。
现在,当客户返回并说“嘿,再次给我”时,服务器会说“我不知道您在说什么”,并打断电话,从而杀死了客户代理
因此,由于已经在服务器端做出决定,因此除非客户端尝试与服务进行对话,否则客户端将无法知道。
您可以执行以下操作之一:
需要更长的时间才能看到问题)
分钟,让服务知道它仍然存在