1
我在azure asp.net网站中使用SQL Azure。偶尔,sql aerver连接不会打开,并且我看到此异常消息(本地和在现场):SQL Azure中的连接超时
连接超时已过期。登录后阶段过去的超时时间。在等待服务器完成登录过程并响应时,连接可能已超时;或者尝试创建多个活动连接时可能已超时。
有人可以解释这些原因,并为此进行适当的修复吗?
我在azure asp.net网站中使用SQL Azure。偶尔,sql aerver连接不会打开,并且我看到此异常消息(本地和在现场):SQL Azure中的连接超时
连接超时已过期。登录后阶段过去的超时时间。在等待服务器完成登录过程并响应时,连接可能已超时;或者尝试创建多个活动连接时可能已超时。
有人可以解释这些原因,并为此进行适当的修复吗?
正如锐锐在他的评论中指出的那样;您将在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;
}
现在我们已经使用了一段时间的块,它减轻了大多数的这些问题我们。
只需重试连接尝试。这就是为什么Azure有瞬态故障处理应用程序块的原因。 – sharptooth
这应该是答案。 – Craig