【问题标题】:Cannot get rid of "physical connection is not usable" exception无法摆脱“物理连接不可用”异常
【发布时间】:2014-05-08 00:25:10
【问题描述】:

我要开枪了。现在花了几个星期试图解决这个问题。我们有一个 ASP.NET MVC 4 Web 应用程序,它使用 SQL Server 2012 和实体框架作为 IoC 的 ORM 和 Unity。 Web 应用程序托管在 Amazon EC2 上。我开始收到“物理连接不可用”异常。它每天发生几次。我搜索了许多文章和论坛并尝试了所有可能的建议:

  • 尝试从连接字符串“Polling=False”中删除池
  • 尝试限制池大小和连接寿命
  • 尝试将 Unity 的 LifetimeManager 更改为 HierarchicalLifetimeManager、PerRequestLifetimeManager。还确保在请求结束后处理实体上下文
  • 删除了所有 TransactionScope 引用

当异常发生时,恢复应用的唯一方法就是重启服务器,这很糟糕!!!

这是完全例外:

向服务器发送请求时发生传输级错误。 (提供者:Session Provider,错误:19 - 物理连接不可用)

【问题讨论】:

  • 这篇文章似乎提供了一个线索...social.msdn.microsoft.com/Forums/en-US/…。在我的连接字符串中,我使用服务器的 DNS 名称,ASP.NET MVC 应用程序托管在与 DB 相同的服务器上,因此我将连接字符串中的服务器名称更改为“。” (当地的)。我会监控并回信
  • 您是否遇到过(本地)问题或您的问题再次出现?

标签: sql-server asp.net-mvc entity-framework unity-container ioc-container


【解决方案1】:

我现在确认,通过将服务器上的连接字符串更改为使用“。”对于数据源而不是域名,异常似乎已经消失。作为以前使用的域名非常奇怪。必须是 SQL Server 上的某种更新

【讨论】:

    【解决方案2】:

    我知道这是一篇旧帖子,但我最近遇到了这个错误的可怕时刻,并且在任何博客上都没有解决方案。

    关于我的问题的具体细节: 带有目标 .NET 框架 4.5、MVC 版本的 ASP.NET Web 应用程序。 5.2.3,实体版。 6.0.0.0,MS SQLServer Express 2014。我的开发系统运行的是 Windows 7 Pro SP1。

    症状:错误突然出现(我已经将近三周没有从事该项目,当时它运行良好)。当我启动应用程序时,在登录用户后,实体框架向数据库发送的第二个查询总是生成错误“从服务器接收结果时发生传输级错误。(提供者:会话提供者) ,错误:19 - 物理连接不可用)”。查询哪个表并不重要。该错误不是间歇性的,重新启动服务器没有帮助。使用 IIS 和 IIS express 时发生错误。

    SqlConnection.ClearAllPools() 仅阻止 ONE 查询的错误,我不想在程序中的每个 Entity 调用之前添加它。我尝试了所有博客上的每一个解决方案都无济于事,甚至解决了其他传输级错误。我为我的参考回滚了包更新,试图恢复到工作状态。没有!

    解决方案:罪魁祸首是 Microsoft SQL Server 2014 SP1 安全更新 (KB3070446)!我回滚了这个更新,一切都像一个魅力!

    我失去了两天的开发工作来处理这个问题,希望这篇文章可以帮助其他人避免这种痛苦!

    【讨论】:

    • 我也有类似的经历。花了几天时间。将服务器上的连接字符串更改为使用“。”为我修好了。也可能与 SQL Server 升级有关。非常讨厌的问题。
    【解决方案3】:

    我有 2 天同样的错误!甚至不知道为什么会突然发生?!

    • 结果是:我遇到了网络身份验证访问问题(由于我的 WiFi 连接).. 一旦我断开/禁用我的 WiFi 并仅通过电缆(安全且稳定)连接进行连接。 . 错误消失了..

    • 我还做了以下,比如:

    重新启动所有 SQL Server 服务。重新启动了我的 SQLServer 实例。 将这些道具添加到我的 DEF 连接字符串中..

    Connection Lifetime=30; Max Pool Size=350;Connection Timeout=30;Connection Lifetime=0;ConnectRetryCount=3;ConnectRetryInterval=10; 
    

    【讨论】:

    • 为什么连接生命周期被指定了两次? 0 是默认值,所以我猜应该只指定 30。但剩下的问题是为什么是 30 而不是其他任意值?
    【解决方案4】:

    在我们的例子中,“物理连接不可用”的问题仅在 MultipleActiveResultSets=true 时出现。 我们的客户通过删除“网络数据包分析器”(法语:analyzer de trames réseau)解决了这个问题

    【讨论】:

      【解决方案5】:

      在设置 db.Database.CommandTimeout = 0 时删除默认设置为 -1 或无限制的 MaxDegreeOfParallelism 后出现此错误。

      建议将 MaxDegreeOfParallelism 显式设置为安全值。

      另一种情况: 在应用程序与服务器数据库通信时,网络连接甚至会中断几秒钟。

      【讨论】:

        【解决方案6】:

        我也遇到了这个错误。就我而言,问题是连接已被数据库服务器关闭,但连接在我的应用程序的连接池中仍然有效。

        重置应用程序池使我的应用程序恢复运行。

        【讨论】:

        • 当我遇到这个问题时没有帮助我。我尝试重新启动服务器,回收应用程序池等。更改连接字符串有帮助
        • 同样的事情可能发生在我身上,我杀死了托管我的网络应用程序的 w3wp.exe 进程并修复了它,所以我猜在我的情况下,问题也与 iis 相关,而不是 sql服务器。
        【解决方案7】:

        这对我来说是一个 DNS 错误,诊断是因为在连接字符串中使用服务器 name 会产生错误,但使用 IP 工作正常。打开 cmd 提示符,快速运行 ipconfig /flushdns 看看是否有帮助。

        【讨论】:

        • 我在单个服务器中有 db 和 iis,并使用了 ip(而不是域名),但这个错误发生在我身上。还没修好。
        【解决方案8】:

        数据库连接被数据库服务器关闭。该连接在您应用的连接池中仍然有效;结果,当您获取共享连接字符串并尝试执行时,它无法访问数据库。如果您正在开发 Visual Studio,只需关闭任务栏上的临时 Web 服务器即可。

        如果它发生在生产中,为您的网站重置应用程序池应该会回收连接池。

        可能是由于入侵防御系统的更新。

        请尝试参考以下线程: http://forums.asp.net/t/1908976.aspx

        希望对你有帮助。

        【讨论】:

          【解决方案9】:

          当我将 nolock 放入 select Query 时,我也遇到了这个问题。

          选择 coid 作为 Facility,tnum 作为 [ACCTNO],Convert(varchar(200),tname) 作为 [ACCTName],Convert(varchar(200),errmsg) 作为来自 ccerror (nolock) 的 msg

          当我删除 nolock 然后它解决了。

          【讨论】:

          • 查询如何影响物理连接?你确定这是同一个例外吗?似乎不太可能。
          • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多