SQL ServerADO.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策略。
  • SqlConnection
    SqlCommand靶提供了扩大方法来实现Retry操作
  • 支撑Retry后底回调,通知用户代码是否发生了Retry情况
  • 支撑快速重试模式,当第一次闹进行Retry时见面即刻尝试要尚未延迟
  • 容在应用程序配置文件中定义Retry策略
  • 支撑并和异步请求

下是几个像样之种:

  • SQL Fault Retry
    Provider供了一个安创造高可用性应用程序的案例,当然特指在SQL
    Mirroring环境下。并且提供了一个可以进行重试操作的 Data Provider.
  • Endjin Retry
    Framework:提供了瞬间TPL的
    重试框架
  • Polly: 提供了一个.NET
    3.5/4.0/4.5 下还可用的重试库
  • 通过nuget上 查询retry可以查到很多有关的品种
    https://www.nuget.org/packages?q=retry 

 

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

基于Enterprise Library 6
的AOP实现

相关文章