2013-06-20 97 views
1

我在azure asp.net网站中使用SQL Azure。偶尔,sql aerver连接不会打开,并且我看到此异常消息(本地和在现场):SQL Azure中的连接超时

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

有人可以解释这些原因,并为此进行适当的修复吗?

+1

只需重试连接尝试。这就是为什么Azure有瞬态故障处理应用程序块的原因。 – sharptooth

+0

这应该是答案。 – Craig

回答

4

正如锐锐在他的评论中指出的那样;您将在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; 
} 

现在我们已经使用了一段时间的块,它减轻了大多数的这些问题我们。