【问题标题】:Async=true and Entity FrameworkAsync=true 和实体框架
【发布时间】:2010-06-30 11:52:06
【问题描述】:

后台 WCF 堆栈,在实体框架中实现的数据访问,简单的 ASP.NET 前端

这是一个两部分的问题。

最近我们遇到了一个周期性崩溃的问题,异常如下:

从服务器接收结果时发生传输级错误。 (提供者:TCP Provider,错误:0 - 指定的网络名称不再可用

我们已经运行了一个多星期没有问题的应用程序,然后突然间我们遇到了这个随机崩溃/如果我不得不猜测我会说它与网络有关,但我们无法确定确切的来源。有没有人定期收到此消息?如果是这样,根本原因是什么?

第二个问题是有人建议在我们的实体框架连接字符串中设置“async=true”。我的印象是这只是启用了异步 api。当您使用 EF 时,这有什么作用吗?切换此标志是否对 EF 生成的查询有任何作用?

【问题讨论】:

    标签: wcf sql-server-2005 entity-framework .net-3.5


    【解决方案1】:

    要成为那个人,我会自己回答这个问题。

    首先,我将关于“async=true”对实体框架的影响的问题发布到MS,但没有人像往常一样回答......(如果他们回答我会更新这篇文章)。

    我们的问题:

    从服务器接收结果时发生传输级错误。 (提供者:TCP Provider,错误:0 - 指定的网络名称不再可用

    与环境有关。有些东西导致数据库运行得有点慢,但它暗示了一个更大的问题。显然,当您在线程之间共享上下文时,EF 存在可怕的问题(这不是一个容易解决的问题),因此我们看到了打开连接的竞争条件。

    我们基本上有一个“只读上下文”,它只会获取。我们的问题是两个线程同时尝试打开连接,一个获胜,另一个失败,导致以下异常的一些变化:

    连接没有关闭。连接的当前状态为正在连接。

    我们的解决方案是将我们的单例转换为特定于线程的。不完全是我们想要的,但它起作用了,当我们推动这个修复时,我们的另一个问题神奇地消失了。

    这个问题的后半部分是 async=true 的作用。说到EF,它让我们的系统崩溃了。我们有一个执行连接的代码块,如果 async=true 和 MARS=false 我们得到:

    已经有一个打开的 DataReader 与此命令关联,必须先关闭

    一旦我们减少了MARS,并且禁用了异步,事情又好了。

    【讨论】:

      猜你喜欢
      • 2014-03-05
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      • 2019-01-08
      • 2023-04-05
      • 2013-02-10
      • 2011-10-11
      • 2020-08-12
      相关资源
      最近更新 更多