Настраиваемый файл конфигурации логики повторных попыток в SqlClient

Применимо: платформа .NET Framework .NET Standard

Скачать ADO.NET

Метод повторных попыток по умолчанию, когда включен параметр-переключатель безопасности, — SqlConfigurableRetryFactory.CreateNoneRetryProvider для SqlConnection и SqlCommand. Вы можете определить другой метод повторных попыток с помощью файла конфигурации.

Разделы конфигурации

Параметры логики повторных попыток по умолчанию для приложения можно изменить, добавив следующие разделы в раздел configSections файла конфигурации:

  • SqlConfigurableRetryLogicConnection — определение логики повторных попыток по умолчанию для SqlConnection.
<section name="SqlConfigurableRetryLogicConnection"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryConnectionSection, Microsoft.Data.SqlClient"/>
  • SqlConfigurableRetryLogicCommand — определение логики повторных попыток по умолчанию для SqlCommand.
<section name="SqlConfigurableRetryLogicCommand"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryCommandSection, Microsoft.Data.SqlClient"/>
  • AppContextSwitchOverrides — .NET Framework поддерживает параметры-переключатели AppContext через раздел AppContextSwitchOverrides, который не нужно определять явным образом. Чтобы включить параметр-переключатель в .NET Core, необходимо определить этот раздел.
<section name="AppContextSwitchOverrides"
        type="Microsoft.Data.SqlClient.AppContextSwitchOverridesSection, Microsoft.Data.SqlClient"/>

Примечание.

В разделе configuration должны быть указаны следующие конфигурации. Объявите эти новые разделы, чтобы настроить логику повторных попыток по умолчанию с помощью файла конфигурации приложения.

Включение параметра-переключателя безопасности

Примечание.

Начиная с Microsoft.Data.SqlClient 4.0, переключение контекста приложения Switch.Microsoft.Data.SqlClient.EnableRetryLogic больше не будет требоваться для использования настраиваемой функции логики повторных попыток. Теперь эта функция поддерживается в рабочей среде. По умолчанию функция по-прежнему будет определяться политикой запрета повторных попыток, что необходимо будет переопределить клиентскими приложениями, чтобы разрешить повторные попытки.

Включить параметр-переключатель безопасности можно с помощью файла конфигурации. Дополнительные сведения о том, как включить его с помощью кода приложения, см. в разделе Включение настраиваемой логики повторных попыток.

  • .NET Framework: дополнительные сведения см. в статье Элемент .
<runtime>
    <AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableRetryLogic=true"/>
</runtime>
  • .NET Core: поддерживает использование нескольких параметров-переключателей, разделенных точкой с запятой (;), как и .NET Framework.
<AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableRetryLogic=true"/>

Раздел подключения

Следующие атрибуты можно использовать для определения логики повторных попыток по умолчанию для всех экземпляров SqlConnection в приложении:

  • numberOfTries: задает количество попыток.

  • deltaTime: задает интервал времени в виде объекта TimeSpan.

  • minTime: задает допустимый минимальный интервал времени в виде объекта TimeSpan.

  • maxTime: задает допустимый минимальный интервал времени в виде объекта TimeSpan.

  • transientErrors: задает список номеров временных ошибок для повторных попыток.

  • retryMethod: определяет создателя метода повтора, который получает конфигурацию повторных попыток через параметр SqlRetryLogicOption и возвращает объект SqlRetryLogicBaseProvider.

  • retryLogicType: задает пользовательский поставщик логики повторных попыток с создателями метода повтора, которые предоставляют retryMethod. Эти методы должны соответствовать критериям для retryMethod. Следует использовать полное имя типа поставщика. Дополнительные сведения см. в статье Определение полных имен типов.

Примечание.

При использовании встроенных поставщиков логики повторных попыток определять объект retryLogicType не нужно. Чтобы найти встроенные поставщики логики повторных попыток, см. статью Внутренние поставщики логики повторных попыток в SqlClient.

Раздел команд

Следующий атрибут также можно задать для всех экземпляров SqlCommand в приложении:

  • authorizedSqlCondition: задает для SqlCommand.CommandText регулярное выражение, выполняемое перед повторным выполнением, для фильтрации определенных инструкций SQL.

Примечание.

В регулярном выражении учитывается регистр.

Примеры

  • Попытка установить подключение до трех раз с задержкой около 1 секунды между попытками с помощью метода SqlConfigurableRetryFactory.CreateFixedRetryProvider и списка временных ошибок по умолчанию:

    <SqlConfigurableRetryLogicConnection retryMethod ="CreateFixedRetryProvider" 
                                            numberOfTries ="3" deltaTime ="00:00:01"/>
    
  • Попытка установить подключение до пяти раз с задержкой до 45 секунд между попытками с помощью метода SqlConfigurableRetryFactory.CreateExponentialRetryProvider и списка временных ошибок по умолчанию:

    <SqlConfigurableRetryLogicConnection retryMethod ="CreateExponentialRetryProvider" 
                        numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45"/>
    
  • Попытка выполнить команду до четырех раз с задержкой в от 2 до 30 секунд с помощью метода SqlConfigurableRetryFactory.CreateIncrementalRetryProvider и списка временных ошибок по умолчанию:

    <SqlConfigurableRetryLogicCommand retryMethod ="CreateIncrementalRetryProvider"
                        numberOfTries ="4" deltaTime ="00:00:02" maxTime ="00:00:30"/>
    
  • Попытка выполнить команду до восьми раз с задержкой от 1 секунды до 1 минуты. Она ограничена командами с CommandText со словом SELECT и числом исключений 102 или 997. При этом используется встроенный метод SqlConfigurableRetryFactory.CreateIncrementalRetryProvider:

    <SqlConfigurableRetryLogicCommand retryMethod ="CreateIncrementalRetryProvider" 
                            numberOfTries ="8" deltaTime ="00:00:01" maxTime ="00:01:00"
                            transientErrors="102, 997"
                            authorizedSqlCondition="\b(SELECT)\b"/>
    

Примечание.

В следующих двух примерах можно найти пользовательский исходный код логики повторных попыток из статьи Базовые API настраиваемой логики повторных попыток в SqlClient. Предполагается, что метод CreateCustomProvider определен в классе CustomCRL_Doc.CustomRetry в сборке CustomCRL_Doc.dll, которая находится в каталоге, в котором выполняется приложение.

  • Попытка установить подключение до пяти раз с задержкой от 3 до 45 секунд и номерами ошибок 4060, 997 и 233 в списке с помощью указанного пользовательского поставщика логики повторных попыток:

    <SqlConfigurableRetryLogicConnection retryLogicType ="CustomCRL_Doc.CustomRetry, CustomCRL_Doc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
                        retryMethod ="CreateCustomProvider" 
                        numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45"
                        transientErrors ="4060, 997, 233"/>
    
  • В этом примере выполняется та же операция, что и в предыдущем:

    <SqlConfigurableRetryLogicConnection retryLogicType ="CustomCRL_Doc.CustomRetry, CustomCRL_Doc"
                        retryMethod ="CreateCustomProvider" 
                        numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45"
                        transientErrors ="4060, 997, 233"/>
    

Примечание.

Поставщики логики повторных попыток будут кэшироваться при первом использовании для подключения или команды для последующего использования во время существования приложения.

Примечание.

Ошибки при чтении файла конфигурации приложения для параметров логики повторных попыток не вызывают ошибок в приложении. Будет использоваться SqlConfigurableRetryFactory.CreateNoneRetryProvider по умолчанию.

Для проверки или устранения проблем с настройкой логики повторных попыток можно использовать трассировку источника событий. Дополнительные сведения см. в статье Включение трассировки событий в SqlClient.

См. также