【问题标题】:Handling Intermittent SQL Timeout/Network Errors处理间歇性 SQL 超时/网络错误
【发布时间】:2014-04-25 17:51:10
【问题描述】:

我正在开发一个连接到 MS SQL Server 2008 R2 的 MVC 应用程序。开发服务器是 Express 版本 - 我不知道这是否是一个促成因素...

间歇性地,当我从 Visual Studio 运行应用程序(因此它在 Chrome 中打开)时,我在连接到 SQL Server 时遇到错误。

错误如:

  • 信号量超时期限已过。
  • 基础提供程序在打开时失败。

这是我的连接字符串(我在公开发布之前更改了其中的几个字)

<add name="[MyEntities]" 
    connectionString="metadata=res://*/Models.[publicword].csdl|res://*/Models.[publicword].ssdl|res://*/Models.[publicword].msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=thanos;initial catalog=[DatabaseName];Integrated Security=SSPI;multipleactiveresultsets=True;application name=EntityFramework&quot;"
    providerName="System.Data.EntityClient" />

我已经通过 Google 搜索了很多,但没有发现任何特别有用的东西 - 我试图弄清楚如何让我的应用程序在遇到连接错误时重试一次,而不是失败,因为它几乎总是在第二次尝试。

有什么建议可以从哪里开始吗?作为管理员,我无权处理服务器,但如果这是解决此问题的地方,我可能可以与管理员协调。

我正在考虑这可能与在本地运行应用程序有关 - 数据库位于离我所在位置几英里远的服务器上。将应用程序部署到服务器后,该应用程序将运行在与数据库相同的物理机上。但我对此感觉还不够好,无法假设一切都会好起来——我不想带着这个假设进入生产阶段,只是为了发现我错了......

【问题讨论】:

  • thanos 是你的本地机器名还是网络名?
  • thanos 是托管 sql server 的服务器的名称
  • 如果你有 EF6,你可以看看Connection Resiliency / Retry Logic
  • 确保您的数据库未设置为自动关闭,否则会导致连接时间延长。

标签: c# sql-server asp.net-mvc entity-framework sql-server-2008r2-express


【解决方案1】:

您是否有任何理由不通过重试块处理间歇性超时?如果实际上您的数据库可能是非地理定位的,那么 IP 延迟和其他网络异常很可能会干扰您偶尔连接的能力。

作为一个类似的例子,连接到 SQL Azure 数据库的标准做法是始终在重试块中连接,主要是出于节流原因而不是网络故障,但以这种方式处理间歇性故障是很常见的做法。

【讨论】:

  • 这就是我想做的事情——虽然我不明白该怎么做——我发现的所有示例都是关于 SQL Azure 的,我在将其应用于非 Azure 时遇到了麻烦。 ..
  • 好的,那我推荐你stackoverflow.com/questions/1563191/…
  • 谢谢!我会调查的。似乎重新启动我们的本地路由器已经解决了我的大部分问题,但我想让我的页面能够更好地处理它遇到的任何问题......
猜你喜欢
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多