Sql server Azure连接错误处理vs SqlException?

Sql server Azure连接错误处理vs SqlException?,sql-server,exception,enterprise-library,azure-sql-database,Sql Server,Exception,Enterprise Library,Azure Sql Database,我有一些C#代码,当它遇到SqlExceptions时会重试,该代码运行在普通的web服务器上,并与Sql2k8数据库进行通信,这是标准的东西 我感兴趣的是将代码移植到Azure Web角色,并将数据库移动到SQL Azure。我发现了一些EntLib的东西,似乎捕捉到了“连接错误”,但我不知道企业库代码在我自己的代码中提供了什么。。。。SqlExceptions是SqlExceptions,对吗?您似乎指的是我们作为Windows Azure企业库集成包的一部分提供的。它不仅包括SQL Azu

我有一些C#代码,当它遇到SqlExceptions时会重试,该代码运行在普通的web服务器上,并与Sql2k8数据库进行通信,这是标准的东西


我感兴趣的是将代码移植到Azure Web角色,并将数据库移动到SQL Azure。我发现了一些EntLib的东西,似乎捕捉到了“连接错误”,但我不知道企业库代码在我自己的代码中提供了什么。。。。SqlExceptions是SqlExceptions,对吗?

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


当然,如果您只关心SQLException,那么您可以使用自己的检测代码。

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


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

我想在Grigori的答案上添加一些东西

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

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


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

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

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

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


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

您是说我可以使用瞬态故障应用程序块来开发内部部署的SQL Server实例,因为它捕捉到诸如SqlExcp和Azure特定的内部错误?有意思。你是说我可以使用瞬态故障应用程序块开发本地SQL Server实例,因为它捕获本地错误,比如SqlExcp和特定于Azure的错误?有趣的