Share via


SqlClient의 구성 가능한 다시 시도 논리 소개

적용 대상: .NET Framework .NET .NET Standard

ADO.NET 다운로드

구성 가능한 다시 시도 논리를 통해 개발자와 관리자는 일시적인 오류가 발생할 때 애플리케이션 동작을 관리할 수 있습니다. 이 기능은 명령을 연결하거나 실행하는 동안 컨트롤을 추가합니다. 컨트롤은 코드 또는 애플리케이션 구성 파일을 통해 정의할 수 있습니다. 일시적인 오류 번호 및 다시 시도 속성을 정의하여 다시 시도 동작을 제어할 수 있습니다. 또한 정규식을 사용하여 특정 SQL 문을 필터링할 수 있습니다.

기능 구성 요소

이 기능은 다음과 같은 세 가지 주요 구성 요소로 구성됩니다.

  1. 코어 API: 개발자는 이러한 인터페이스를 사용하여 SqlConnectionSqlCommand 개체에서 자체 다시 시도 논리를 구현할 수 있습니다. 자세한 내용은 구성 가능한 다시 시도 논리 코어 API 사용을 참조하세요.
  2. 사전 정의된 구성 가능한 다시 시도 논리: 코어어 API를 사용하는 기본 제공 다시 시도 논리 메서드는 SqlConfigurableRetryFactory 클래스에서 액세스할 수 있습니다. 자세한 내용은 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. SqlConnection.RetryLogicProvider 또는 SqlCommand.RetryLogicProviderSqlRetryLogicBaseProvider 인스턴스를 할당합니다.
    이 샘플에서 연결 열기 명령이 SqlConfigurableRetryFactory 내부 목록의 일시적인 오류 중 하나에 도달하면 최대 5번까지 다시 시도합니다.

    // 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 속성에 다시 시도 공급자를 할당하는 것을 제외하고는 명령 실행에 대해 동일합니다.

참고 항목