.net – 如何在Azure角色中解决与SQL Azure连接的突然丢失?

前端之家收集整理的这篇文章主要介绍了.net – 如何在Azure角色中解决与SQL Azure连接的突然丢失?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的Azure角色 grabs stuff to process from a database – 它包含一个System.Data.sqlClient.sqlConnection的实例,并定期创建一个sqlCommand实例并执行一个SQL查询.

现在一段时间(通常是几天),运行一个查询会触发一个sqlException异常

The service has encountered an error processing your request. Please try again. Error code 40143.
A severe error occurred on the current command. The results,if any,should be discarded.

我已经看过很多次,现在我的代码捕获它,在sqlConnection实例上调用Dispose(),然后重新打开连接并重试查询.后者通常导致另一个sqlException异常

Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

这看起来很像sql Azure服务器没有响应或由于任何原因不可用.

目前我的代码没有捕获后一个异常,它会在RoleEntryPoint.Run()之外传播,角色重新启动.重新启动通常需要大约十分钟,一旦完成,问题就消失了一天左右.

我不喜欢我的角色重新启动 – 需要一段时间,我的服务功能受到阻碍.我想做点更聪明的事情

解决这个问题的策略是什么?我应该重试几次,多少次,间隔多久?我应该做别的事吗什么时候放弃,让角色刚刚重启?

解决方法

我强烈建议您看看 Transient Fault Handling Framework for SQL Azure

这将有助于您处理连接和查询尝试的重试逻辑,我在生产中使用它,它的工作原理很好.还有一个很好的文章on technet可能有一些用处.

[编辑:2013年10月17日]

看起来这是由The Transient Fault Handling Application Block的模式和实践团队拾起的

猜你在找的MsSQL相关文章