我们有一个WPF application
,通过REST API
托管在生产环境中运行SQL Server 2012
进行通信。
WPF应用程序工作正常,但经过几个小时的CRUD操作后,它不断抛出Under Lying Connection Close exception.
直到我重新启动SQL Services
我在开发环境中运行SQL Express Edition 2012
。但它在开发环境中运行良好。
答案 0 :(得分:1)
可能会出现以下几种原因:1)服务器或路由器具有关闭TCP连接的设置。就像最大开放时间一样。 2)更常发生这种情况是由于TCP保留用于重试数据包的表。 TCP将消息分成1500字节的数据报(数据包的数据部分)。 TCP为发送的每条消息发送ACK。当数据包没有得到ACK时,通常会在重试约5秒后重新发送3-5次。数据包也可以按随机顺序接收。因此,TCP的发送方必须将每个数据包保存在表中,直到收到ACK。然后从表中删除数据包。接收方必须有表来重新排序数据包。收到所有先前的数据包后,将从表中删除数据包。这些表可能变得非常大,然后操作系统可能会关闭应用程序。通常导致这种情况发生的原因是当接收端运行大量应用程序时,它不会在5秒内确认消息。所以发送端重新发送数据包。重发数据包发送更多数据,这会给接收器增加更多处理速度,从而减慢接收器的速度。检查问题的最佳方法是使用wirehark或fiddler之类的嗅探器,看看是否看到重复的数据包数字表示重试。您通常应该看到每个数据包编号两次(发送一次,ACK时一次)。