WCF net.tcp连接在9小时1分钟后终止

WCF net.tcp连接在9小时1分钟后终止,wcf,Wcf,我有一个WCF客户端正在与WCF服务器(在同一台机器上)通信。我们使用具有消息级安全性的netTcpBinding(使用自定义principalPermissionMode和serviceCredentials的自定义实现)。该服务标记为InstanceContextMode.PerSession WCF服务在Windows服务(而不是IIS)中自托管 为了保持活动状态,我们有一个Ping方法,客户端每15秒调用一次。我们在客户机程序的生命周期内保持客户机代理打开(因为在我们的例子中初始化会话是

我有一个WCF客户端正在与WCF服务器(在同一台机器上)通信。我们使用具有消息级安全性的netTcpBinding(使用自定义principalPermissionMode和serviceCredentials的自定义实现)。该服务标记为
InstanceContextMode.PerSession

WCF服务在Windows服务(而不是IIS)中自托管

为了保持活动状态,我们有一个
Ping
方法,客户端每15秒调用一次。我们在客户机程序的生命周期内保持客户机代理打开(因为在我们的例子中初始化会话是昂贵的)

尽管如此,连接在9小时1分钟后中断(在10次测试运行中,其中7次在9h1m6s后死亡)

WCF日志中唯一重要的是“SocketConnection aborted”消息,随后是一组不同的异常,但通常包括“connection was in faulted state”(连接处于故障状态)异常


WCF或TCP/IP中是否存在导致此问题的超时?因为我被难住了。

从您上面的评论中可以看出,您正在同时运行测试

它们是否也在同一台服务器上,使用同一个应用程序池


如果是这样的话,回收应用程序池可能会导致所有测试同时停止。

经过大量繁琐的调查:大约9小时后,WCF客户端使用服务重新验证。在身份验证步骤中,我正在做的事情是终止现有会话。

10次测试运行,每次超过9小时?我佩服你的耐心。老实说,这是4个客户的2次测试,1个客户的2次同时测试。所以只有18个小时,而且通宵离开。如果你仔细想想,
9x3600+60+6是的,但不完全是这样,即使如此,这是从哪里来的?是的,相同的服务器。不使用IIS,因此没有应用程序池。让我的QA人员让客户交错启动,看看他们是在同一时间死亡,还是在同样的延迟后死亡。+1-我遇到了这个问题,独立得出了相同的结论。要是我先从你的研究中获益就好了,但我不知道该找什么。我很好奇身份验证出了什么问题?在我们的例子中,我们进行自定义身份验证,并故意不允许同一个客户端连接两次,这是在验证时检查的。所以,重新验证总是失败。@Joelle:确实如此,但再往后一点。重新身份验证正在终止上一个后端会话,这将触发一个
Kicked
事件,导致我中断WCF会话,从而终止客户端。