Nix*_*Nix 4 wcf entity-framework sql-server-2005 .net-3.5
背景WCF堆栈,实体框架中实现的数据访问,简单的ASP.NET前端
这是一个两部分问题.
最近我们遇到了一个周期性崩溃的问题,例外情况如下:
从服务器接收结果时发生传输级错误.(提供程序:TCP提供程序,错误:0 - 指定的网络名称不再可用
我们已经运行我们的应用程序没有问题超过一个星期,然后突然我们被这个随机崩溃击中/如果我不得不猜我会说它是网络相关的,但我们无法确定确切的来源.有没有人定期收到这条消息?如果是这样,根本原因是什么?
第二个问题是有人建议在我们的Entity Framework连接字符串中设置"async = true".我的印象是这只是启用异步api.使用EF时,这有什么用处吗?切换此标志是否对EF生成的查询执行任何操作?
作为那个人,我将自己回答这个问题.
首先,我向MS发布了关于"async = true"对实体框架的影响的问题,没有人回答......像往常一样(如果他们回答我会更新这篇文章).
我们的问题:
从服务器接收结果时发生传输级错误.(提供程序:TCP提供程序,错误:0 - 指定的网络名称不再可用
与环境有关.有些事情导致数据库运行速度稍慢,但它暗示了一个更大的问题.显然,当您在线程之间共享上下文时,EF会出现可怕的问题(这不是一个容易解决的问题),因此我们看到了一个开放连接的竞争条件.
我们基本上只有一个"只读上下文"才能获得.我们的问题是两个线程试图同时打开连接,一个获胜,另一个失败导致下面的异常的一些变化:
连接没有关闭.连接的当前状态是连接.
我们的解决方案是将我们的单例转换为特定于线程的.不完全是我们想要的,但它有效,当我们推动这个修复时,我们的另一个问题神奇地消失了.
这个问题的后半部分是async = true做的.说到EF,它让我们的系统崩溃了.我们有一个代码块进行了连接,如果async = true且MARS = false,我们得到一个:
已经有一个与此命令关联的打开DataReader,必须先关闭它
一旦我们削减了MARS,并且禁用异步事情再次成功.
| 归档时间: |
|
| 查看次数: |
1220 次 |
| 最近记录: |