【问题标题】:Connection timeout in SQL AzureSQL Azure 中的连接超时
【发布时间】:2013-06-20 13:49:10
【问题描述】:

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

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

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

【问题讨论】:

  • 重试连接尝试。这就是 Azure 有瞬态故障处理应用程序块的原因。
  • 这应该是答案。

标签: azure-sql-database


【解决方案1】:

正如 Sharptooth 在他的评论中指出的那样;您将在 SQL Azure 上更频繁地遇到暂时性错误。微软提供了Transient Fault Handling Block 来解决常见的连接问题;允许您定义检测策略和重试策略。

请参阅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;
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 2016-06-20
    相关资源
    最近更新 更多