ADO.NET的弹性连接控制[ADO.NET idle connection resiliency]

ADO.NET连接SQL Server有时候联机会无故的中止
(例如闲置过久或是交易时间太长等成分),那时又要重复连接,在.NET Framework
4.5事先,那件业务要由开发人员本人根据ADO.NET的SqlException来判定并机关重试,重试的算法也要由开发人员来自定义,所以SQL
Database的CAT (Customer Advisory Team) 开发了Transient Fault
Framework
给Windows
Azure的开发人士使用,而.NET Framework
4.5.1则正式将它纳入ADO.NET的着力程序代码中,可以断开会话状态并在方便的时候恢复生机对话,很多景色都会收益于这几个作用.

ADO.NET Idle Connection Resiliency这些效应被打包在Entity Framework
6中,在DbConfiguration设定DbExecutionStrategy对象,Entity Framework
6内建了三种不一样的DbExecutionStrategy[http://msdn.microsoft.com/pt-BR/data/dn456835],分别是:

说明

DefaultExecutionStrategy

执行时不包含重试策略,这会自动用于SQL Server以外的数据库。

DefaultSqlExecutionStrategy

执行时不包含重试策略,但是它会包装例外状况,由使用者决定是否要启用Connection Resiliency。

DbExecutionStrategy

这个对象是所有执行策略的基础类别,它包装了指数式重试原则 (exponential retry policy) 算法,并且由实作来决定要如何使用这个算法,以及重试的次数等。

SqlAzureExecutionStrategy

专为SQL Azure Database设计的重试策略,会依照已知的可能瞬断问题进行自动的重试处理。

选取 IDbConnectionStrategy 可以安顿重试次数。 EF 中包括的 SQL Server
提供程序用来指定
default:SqlServer­ExecutionStrategy,它会显得错误新闻告诉调整须臾态连接引发这一个的方针。
其余一个方针 SqlAzureExecutionStrategy 通过微调可以接连 Windows Azure
SQL 数据库。

最简便的策略指定方法是行使新的 DbConfiguration
类,使用该类可以很简单配置特定数据库提供程序的一言一动。 以下命令可以让 EF
针对 SqlClient 使用 SQLAzureExecutionStrategy:

          SetExecutionStrategy (SqlProviderServices.ProviderInvariantName,  () => new SqlAzureExecutionStrategy());        

不仅仅接连策略能够安插,而且你还是能团结创办策略并按照须要经过编程暂停使用它们。

上文提到的 Transient Fault Framework
其实Enterprise
Library
的多个模块。那些框架考虑到了处理全部只怕的弹指态错误的要求,在中间贯彻了三个“Retry
Policy”来担保只处理须求的不当。在客户进入重试状态前会使用政策验证那几个特别是不是属于弹指态错误。

  • 提供了二个可伸张的Retry逻辑处理瞬态错误,不仅限于SQL Server。
  • 支持一名目繁多的重试方案(固定周期,渐进周期,随机指数退避)
  • 扶助SQL 连接和SQL命令使用不一样的Retry策略。
  • SqlConnectionSQL Server,
    SqlCommand目的提供了扩充方法来促成Retry操作
  • 支撑Retry后的回调,通告用户代码是还是不是发生了Retry景况
  • 支撑高效重试情势,当第⑤次发生举办Retry时会马上尝试而从未延迟
  • 同意在应用程序配置文件中定义Retry策略
  • 支撑同步和异步请求

下边是多少个类似的门类:

 

译文:SQL
Azure客户端-须臾态错误处理最佳实践

基于Enterprise Library 6
的AOP实现

相关文章