我在我的azure asp.net网站上使用SQL Azure。有一段时间,sql aerver连接没有打开,我看到这个异常消息(本地和现场网站):
连接超时已过期。在登录后阶段过去了超时时间。在等待服务器完成登录过程并响应时,连接可能已超时;或者在尝试创建多个活动连接时可能会超时。
有人可以解释这些的原因,并为此做出合适的解决方法吗?
答案 0 :(得分:5)
有关瞬态故障处理块的功能的简要概述,请参见HERE;有关如何将其添加到应用程序的指南,请参见HERE。(谢天谢地,您可以使用NuGet)。
处理块主要像连接周围的try / catch块一样工作;使用DetectionStrategy
捕获常见连接错误,然后在错误与策略中声明的错误匹配时重试连接。
我们将LinqToSQL与工作空间模式结合使用;包裹我们连接的块看起来像这样:
private const int DELAYMILLISECONDS = 250;
private const int MAXRETRIES = 10;
public static ApplicationDatabaseDataContext Create(string connectionString)
{
var policy = new RetryPolicy<SqlAzureTransientErrorDetectionStrategy>(
MAXRETRIES,
TimeSpan.FromMilliseconds(DELAYMILLISECONDS));
var applicationDatabaseDataContext =
policy.ExecuteAction(() => GetDataContext(connectionString));
return applicationDatabaseDataContext;
}
我们现在已经使用了一段时间,它为我们缓解了大部分问题。