繁体   English   中英

一段时间后底层连接失败

[英]Underlying Connection Failed after some time

我们有一个WPF application ,该WPF application通过运行SQL Server 2012生产环境上托管的REST API进行通信。 WPF应用程序可以正常工作,但是经过数小时的CRUD操作后,它始终抛出Under Lying Connection Close exception. 在重新启动SQL Services之前,我还将在开发环境上运行SQL Express Edition 2012 但是它在开发环境上工作良好。

原因可能有几种:1)服务器或路由器的设置正在关闭TCP连接。 就像最大的开放时间。 2)这种情况经常发生是由于TCP保留了用于重试数据包的表。 TCP将消息分解为1500字节数据报(数据包的数据部分)。 TCP为发送的每个消息发送一个ACK。 当数据包没有收到ACK时,通常会在重试5秒钟左右重发3-5次。 数据包也可以按随机顺序接收。 因此,TCP的发送端必须将每个数据包保存在表中,直到收到ACK。 然后从表中删除数据包。 接收者必须具有用于重新排序数据包的表。 收到所有先前的数据包后,将从表中删除数据包。 这些表可能会变得非常大,然后操作系统可能会关闭应用程序。 通常,导致这种情况发生的原因是,当接收端正在运行许多应用程序时,它不会在5秒钟内确认消息。 因此,发送端重新发送数据包。 重发数据包发送更多的数据,这给接收器增加了更多的处理,从而使接收器更加缓慢。 检查问题的最佳方法是使用嗅探器,例如Wireshark或Fiddler,查看是否看到重复的数据包编号,表示重试。 通常,您应该看到每个数据包号两次(发送一次,确认一次)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM