导致此SqlException的原因:从服务器接收结果时发生了传输级错误
这是完整的错误:SqlException:从服务器接收结果时发生传输级错误。 (提供者:共享内存提供者,错误:1 I / O在读/写操作中检测到错误)`
对于我的应用程序中的一些单元测试,我已经开始间歇性地看到此消息(超过1100个单元和系统测试)。我在ReSharper 4.1中使用测试运行器。
另一件事:我的开发机是VMWare虚拟机。
解决方案
回答
我之前碰到过这么多卫星。底线是可用端口已用完。
首先,请确保呼叫应用程序已打开连接池。
如果是这样,请检查SQL Server的可用端口数。
发生的情况是,如果关闭了池连接,则每个呼叫都占用一个端口,并且默认情况下,该端口要花费4分钟才能使端口过期,并且端口用尽了。
如果启用了池,则需要分析SQL Server的所有端口,并确保有足够的端口,并在必要时进行扩展。
当我遇到此错误时,连接池关闭,并且每当在网站上施加适当的负载时,就会导致此问题。我们在开发中没有看到它,因为最大负载为2或者3个人,但是一旦数量超过10,我们就会继续看到此错误。我们打开了池,并对其进行了修复。
回答
我也是在很多年前碰到过这样的卫星。但是,我们不反对@ Longhorn213s的解释,但是我们有完全相反的行为。我们在开发和测试中收到错误,但在生产上却没有收到错误,显然负载要大得多。我们最终忍受了开发中的问题,因为它是零星的,并且没有实质性地减慢进度。我认为此错误可能有多种原因,但我自己却无法查明原因。
回答
当网络很时髦或者NIC即将出局时,我已经看到了很多。检查网络堆栈。
回答
我们在环境中看到了这一点,并将其一部分追溯到查询中的" NOLOCK"提示。我们删除了NOLOCK提示,并将服务器设置为使用"快照隔离"模式,这些错误的发生率大大降低了。
回答
我们还遇到了此错误,并发现我们正在从数据库服务器中终止SQL Server连接。客户端应用程序给人的印象是该连接仍处于活动状态,并尝试使用该连接,但由于已终止而失败。