我在Windows服务上托管了简单的WCF服务。
当wcf服务的客户端空闲10分钟或更长时间WCF服务在客户端终止[不在服务器端时,服务器服务仍然存在]并且我遇到了错误的超时错误。
我不想增加超时时间。我只是想知道是否有一种方法可以知道服务是否在客户端终止?[API是否提供此信息?]然后如果会话终止,我将创建新的。
祝福
Ps:在客户端,我检查了WCFClientChannel->Sate == CommunicationState::Faulted
,但这不起作用
答案 0 :(得分:1)
不幸的是,知道代理不再可用的唯一方法是尝试使用它。
实际发生的是您使用的绑定是sessionful(例如NetTcpBinding或WSHttpBinding),服务为该客户端连接维护资源。如果客户端在服务的receiveTimeout中指定的时间内没有与服务通信(默认为10分钟),则服务器会确定客户端没有返回并丢弃客户端的服务器端资源。
现在,当客户回来并说“嘿,我再次”时,服务器说“我不知道你在说什么”,并且错误地通话,从而杀死了客户代理
因此,由于服务器端已做出决定,客户端无法知道,除非它尝试与服务进行通信
您可以执行以下操作之一: