【发布时间】:2013-02-19 21:43:17
【问题描述】:
我们在 CodePlex 上基于 Kigg 项目的设计建立了一个网站:
http://kigg.codeplex.com/releases/view/28200
基本上,代码使用存储库模式,以及基于 Linq-To-Sql 的存储库实现。完整的源代码可以在上面的链接中找到。
该网站已经运行了一段时间,大约一年前,我们开始收到如下错误:
- 已经有一个打开的 DataReader 与此命令关联,必须先关闭它。
- ExecuteNonQuery 需要打开且可用的连接。连接的当前状态为关闭。
根据我的记忆,这些是我能找到的最接近的错误示例。当网站流量开始回升时,这些错误开始发生。在将头撞到墙上后,我发现假设问题出在 Linq-To-Sql 内部,以及我们如何使用同一连接在单个 Web 请求中调用多个命令。 p>
最后,我发现了 MARS(多个活动结果集)并将其添加到数据上下文的连接字符串中,就像魔术一样,我所有的错误都消失了。
现在,快进大约 1 年,网站流量大幅增加。每周左右,我都会在 SQL Server 中收到一条错误消息:
当前命令发生严重错误。结果,如果有的话,应该丢弃
在此错误之后,我立即在错误日志中收到数百到数千个 InvalidCastException 错误。基本上,每次调用 Linq-To-Sql 数据上下文时都会出现此错误。只有在我重新启动 Web 服务器后,这些错误才会清除。
我在 Micosoft 支持网站上阅读了一篇描述我的问题(减去 InvalidCastException 错误)的帖子,并指出解决方案是,如果我要使用 MARS,我也应该使用 Asncronous Processing=True。我试过这个,但它也没有解决我的问题。
不确定从这里去哪里。希望这里有人之前已经看到并解决了这个问题。
【问题讨论】:
-
@AaronBertrand,谢谢。版本为 Microsoft SQL Server 2012 - 11.0.2218.0 (X64)
-
您可以先考虑Service Pack 1,然后再考虑Cumulative Update 2。许多这些“严重错误”问题都被悄悄地修复了(据我所知,这个问题是非悄悄地修复的,但我还没有审查所有公开的修复程序)。此外,我还没有听到很多 MARS 的成功案例。你确定你需要它吗?
-
我发现问题是继承了 Linq-To-Sql 不,不是。尝试创建多个结果集是代码中的错误。
-
@RemusRusanu,有趣的观点......我从来没有这样想过......;)为了确认我们在谈论同样的事情,这是一个命令(通过 id 查找用户)与另一个命令(列出所有用户)同时在 same 连接上执行?
-
A severe error occurred on the current command:用 CSS 打开一个支持案例,他们有办法调查它。不要不假设是同一个问题,因为所有服务器转储都显示相同的客户端错误消息。对于开放的结果集问题,找到根本原因并解决它,不要猜测。
标签: sql-server linq-to-sql sql-server-mars kigg