无法摆脱"物理连接不可用"例外

时间:2014-03-28 13:43:06

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

我即将自己开枪。花了几周时间试图解决这个问题。我们有一个ASP.NET MVC 4 Web应用程序,它使用SQL Server 2012和Entity Framework作为ORM和Unity for IoC。 Web应用程序托管在Amazon EC2上。我开始得到"物理连接不可用"例外。它每天发生几次。我搜索了很多文章和论坛,并尝试了所有可能的建议:

  • 尝试从连接字符串中删除池"轮询=错误"
  • 尝试限制池大小和连接生存期
  • 尝试将Unity的LifetimeManager更改为HierarchicalLifetimeManager,PerRequestLifetimeManager。还确保在请求结束后处理实体上下文
  • 删除了所有TransactionScope引用

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

这是完全例外:

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

8 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

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

有关我的问题的具体细节: ASP.NET Web应用程序,目标是.NET framework 4.5,MVC ver。 5.2.3,实体版6.0.0.0,MS SQL Server Express 2014.我的开发系统正在运行Windows 7 Pro SP1。

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

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

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

重置应用程序池让我的应用程序恢复正常运行。

答案 4 :(得分:1)

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

  

建议将MaxDegreeOfParallelism明确设置为安全值。

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

答案 5 :(得分:0)

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

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

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

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

希望它可以提供帮助。

答案 6 :(得分:0)

这对我来说是DNS错误,被诊断为是由于在连接字符串中使用服务器 name 导致了错误,但使用 IP 可以正常工作。打开cmd提示符,快速运行ipconfig /flushdns看看是否有帮助。

答案 7 :(得分:0)

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

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

  • 我也做了以下事情,例如:

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

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