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

sha*_*oth 14 .net sql-server reliability azure azure-sql-database

我的Azure角色从数据库中抓取要处理的内容 - 它包含一个实例System.Data.SqlClient.SqlConnection并定期创建SqlCommand实例并执行SQL查询.

现在偶尔(通常是几天一次)运行查询将触发SqlException异常

该服务在处理您的请求时遇到错误.请再试一次.错误代码40143.当前命令发生严重错误.结果(如果有的话)应该被丢弃.

我已经见过很多次,现在我的代码捕获它,呼吁Dispose()SqlConnection实例,然后重新打开连接和试查询.后者通常会导致另一个SqlException例外

超时已过期.操作完成之前经过的超时时间或服务器没有响应.

这看起来非常像SQL Azure服务器无响应或因任何原因无法使用.

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

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

解决这个问题的策略是什么?我应该多次重试查询多少次以及间隔多少次?我应该做别的吗?我什么时候放弃并让角色重启?

Dav*_*ele 14

我强烈建议您查看SQL Azure瞬态故障处理框架

这将帮助您处理连接和查询尝试的重试逻辑,我在生产中使用它并且它工作得很好.关于technet的一篇很好的文章可能会有所帮助.

[编辑:2013年10月17日]

看起来这已被瞬态故障处理应用程序块中的模式和实践团队选中

  • Transient Fault Handling站点有一个不妥协的错误:关闭. (5认同)