SqlClient 中可配置的重试逻辑简介

适用于: .NET Framework .NET .NET Standard

下载 ADO.NET

可配置的重试逻辑使开发人员和管理员能够在发生暂时性故障时管理应用程序行为。 此功能在连接或执行命令的过程中添加控制措施。 可以通过代码或应用程序配置文件来定义控制措施。 可以定义暂时性错误编号和重试属性来控制重试行为。 此外,可以使用正则表达式来筛选特定的 SQL 语句。

功能组件

此功能由三个主要组件组成:

  1. 核心 API:开发人员可以使用这些接口在 SqlConnectionSqlCommand 对象上实现自己的重试逻辑。 有关详细信息,请参阅 SqlClient 中可配置的重试逻辑核心 API
  2. 预定义的可配置重试逻辑:使用可从 SqlConfigurableRetryFactory 类访问的核心 API 的内置重试逻辑方法。 有关详细信息,请参阅 SqlClient 中的内部重试逻辑提供程序
  3. 配置文件架构:为应用程序中的 SqlConnectionSqlCommand 指定默认重试逻辑。 有关详细信息,请参阅 SqlClient 提供的可配置重试逻辑配置文件

快速入门

若要使用此功能,请按照以下四个步骤操作:

  1. 在预览版本中启用安全开关。 有关如何启用 AppContext 安全开关的详细信息,请参阅启用可配置的重试逻辑

  2. 使用 SqlRetryLogicOption 定义重试逻辑选项。
    此示例中设置了某些重试参数,其余参数将使用默认值。

    // Define the retry logic parameters
    var options = new SqlRetryLogicOption()
    {
        // Tries 5 times before throwing an exception
        NumberOfTries = 5,
        // Preferred gap time to delay before retry
        DeltaTime = TimeSpan.FromSeconds(1),
        // Maximum gap time for each delay time before retry
        MaxTimeInterval = TimeSpan.FromSeconds(20)
    };
    
  3. 使用 SqlRetryLogicOption 对象创建重试逻辑提供程序。

    // Create a retry logic provider
    SqlRetryLogicBaseProvider provider = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(options);
    
  4. SqlRetryLogicBaseProvider 实例分配给 SqlConnection.RetryLogicProviderSqlCommand.RetryLogicProvider
    在此示例中,如果连接打开命令命中了 SqlConfigurableRetryFactory 内部列表中的一个暂时性错误,则该命令将重试最多五次。

    // Assumes that connection is a valid SqlConnection object 
    // Set the retry logic provider on the connection instance
    connection.RetryLogicProvider = provider;
    // Establishing the connection will retry if a transient failure occurs.
    connection.Open();
    

注意

这些步骤与命令执行的步骤相同,区别在于执行命令之前,需要将重试提供程序分配给 SqlCommand.RetryLogicProvider 属性。

另请参阅