我有一些ASP.Net网站(.Net v3.5)在具有sql 2000数据库后端的服务器上运行.几个月来,我一直收到看似随机的InvalidOperationExceptions,并显示“Internal connection fatal error”(内部连接致命错误).有时候会有几天之间,而其他时候每天有多个错误.
例外情况不限于一个站点,尽管它们共享业务和数据访问组件.错误似乎总是从sqlClient.TdsParser.Run()抛出.它有时从老派直接sqlCommand.Execute()调用抛出,而其他时候它是从Linq2sql代码抛出的.@H_404_3@
网络人员已经确信,他们的最终没有错误或数据包丢失.有没有人经历过这个?可能是驱动程序问题吗?我们一直无法确定此异常的特定触发器.@H_404_3@
解决方法
经过几个月的忽视这个问题,随着流量的逐渐增加,它开始达到临界质量.在很大的负载下,包括一些爬行动物,事情变得疯狂,这些错误不停地涌入.
通过尝试和错误,我们最终在使用后立即关闭了sqlCommand或LINQ查询,sqlConnection没有立即关闭.相反,通过源自对LINQ连接的误解的一些粗暴的编程,DataContext对象只在请求结束而不是立即被处理(并且关闭).@H_404_3@
一旦我们重构了这些方法,立即用C#“使用”块关闭连接(释放下一个请求的池),我们没有收到更多的错误.虽然我们仍然不知道连接池会如此混乱的根本原因,但我们能够停止此类型的所有错误.这个问题与我发布的另一个类似的错误一起解决了,在这里找到:Why is my SqlCommand returning a string when it should be an int?@H_404_3@