Azure连接故障处理与SqlException?

时间:2012-06-26 23:50:03

标签: sql-server exception enterprise-library azure-sql-database

我有一些C#代码在它访问SqlExceptions时重试,代码在vanilla Web服务器上运行并与Sql2k8数据库进行对话,标准内容。

我有兴趣将代码移植到Azure Web角色,并将数据库移动到SQL Azure。我发现了一些似乎捕获“连接错误”的EntLib东西,但我无法分辨企业库代码提供的内容...... SqlExceptions是SqlExceptions,对吗?

2 个答案:

答案 0 :(得分:3)

我想在Grigori的回答之上添加一些东西。

瞬态故障处理应用程序块具有SQL Azure的默认重试策略,该策略将帮助您覆盖只有SQL数据库将抛出(而不是SQL Server数据库)的SqlExceptions,以保证连接重试。重要的原因是您应该只对需要重试的SqlExceptions执行连接重试。这是使用应用程序块的好处之一。

然而......尽管应用程序块非常有用,但SqlExceptions只是您将在云中获得的一种错误:由SQL数据库生成的错误。您可能(将)需要捕获其他类型的错误以保证连接重试的完整性,例如负载均衡器或您和SQL数据库之间的其他中间代理层导致的某些IO异常。这些信息没有权威来源;只是个人经历。然而,好消息是有一种方法(或者我应该说曾经是原始重试框架的一种方法)来定制应用程序块以包含您希望重试策略处理的各种异常。由于我没有使用过最新版本,请完成此声明......万一事情已经发生变化。

因此,无论您要连接的SQL数据库引擎如何,应用程序块都提供了一种灵活的方式来管理连接重试策略,并且可以很好地控制您实际要重试的异常列表。对于具有非常集中的连接逻辑并且只处理SQL数据库的应用程序来说,这可能是一种过度杀伤,但它是一个非常强大的框架。

答案 1 :(得分:1)

您似乎指的是我们作为Windows Azure企业库集成包的一部分提供的Transient Fault Handling Application Block。它不仅包括SQL Azure的检测策略,还包括Windows Azure存储,缓存和服务总线以及一组可扩展的重试策略。我们的想法是在所使用的多种技术之间实现一致的重试行为。

当然,如果你关心的只是SqlExceptions,你可以使用自己的检测代码。