【发布时间】:2011-08-10 06:03:48
【问题描述】:
我的 Azure 角色 grabs stuff to process from a database - 它拥有一个 System.Data.SqlClient.SqlConnection 实例并定期创建一个 SqlCommand 实例并执行 SQL 查询。
现在偶尔(通常几天一次)运行查询将触发SqlException 异常
服务在处理您的请求时遇到错误。请再试一次。错误代码 40143。 当前命令发生严重错误。结果(如果有)应丢弃。
我已经看过很多次了,现在我的代码捕获了它,在 SqlConnection 实例上调用 Dispose(),然后重新打开连接并重试查询。后者通常会导致另一个 SqlException 异常
超时。在操作完成之前超时时间已过或服务器没有响应。
这看起来很像 SQL Azure 服务器没有响应或由于某种原因不可用。
目前我的代码没有捕捉到后一个异常,它在RoleEntryPoint.Run() 之外传播并重新启动角色。重新启动通常需要大约十分钟,一旦完成,问题就会消失一天左右。
我不喜欢我的角色重新启动 - 这需要一段时间,而且我的服务功能受到阻碍。我想做一些更聪明的事情。
解决这个问题的策略是什么?我应该多次重试查询,多少次以及间隔多长时间?我应该做点别的吗?我什么时候放弃,让角色重新开始?
【问题讨论】:
标签: .net sql-server azure azure-sql-database reliability