处理间歇性SQL超时/网络错误



我正在开发一个连接到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" />

我在谷歌上搜索了很多次,没有发现任何特别有用的东西——我正试图弄清楚,当我的应用程序出现连接错误时,我如何让它重试一次,而不是失败,因为它几乎总是在第二次尝试时起作用。

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

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

是否有任何原因不通过重试块处理间歇性超时?如果事实上你的数据库可能没有地理位置,那么IP滞后和其他网络异常很可能会干扰你偶尔连接的能力。

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

最新更新