2

我在我的 azure asp.net 网站中使用 SQL Azure。偶尔,sql aerver 连接没有打开,我看到这个异常消息(本地和实时站点):

连接超时已过期。登录后阶段超时时间已过。连接可能在等待服务器完成登录过程并响应时超时;或者它可能在尝试创建多个活动连接时超时。

有人可以解释这些的原因,以及一个合适的解决方法吗?

4

1 回答 1

5

正如 Sharptooth 在他的评论中指出的那样;您将在 SQL Azure 上更频繁地遇到暂时性错误。Microsoft 提供了瞬态故障处理块,可解决常见的连接问题;允许您定义检测策略和重试策略。

有关瞬态故障处理块的功能的简要概述,请参见此处,有关如何将其添加到应用程序的指南,请参见此处(谢天谢地,您可以使用 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;
}

我们已经使用该块一段时间了,它为我们减轻了大部分这些问题。

于 2013-07-12T11:57:08.140 回答