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

时间:2014-04-25 17:51:11

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

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

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

错误如:

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

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

<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进行了相当多的搜索,但没有发现任何特别有用的东西 - 我试图找出如何在我的应用程序出现连接错误而不是失败时重试我的应用程序,考虑到它几乎总是在第二次尝试。

有关从哪里开始的任何建议?作为管理员,我无法访问服务器,但如果这是解决此问题的地方,我可以与管理员协调。

我正在考虑这可能与本地运行应用程序有些相关 - 数据库位于离我所在位置数英里的服务器上。将应用程序部署到服务器后,应用程序将在与数据库相同的物理盒上运行。但是我觉得这一切都没有那么好,因为我觉得一切都会好起来的 - 我不想通过这个假设去生产只是为了发现我错了......

1 个答案:

答案 0 :(得分:1)

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

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