Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: .NET Framework
.NET
.NET Standard
Este artigo mostra como criar um provedor de nova tentativa exponencial e atribuí-lo a um SqlConnection. O provedor realiza novas tentativas com base na lista integrada do driver de erros de conexão transitórios e tenta abrir a conexão até cinco vezes.
Pré-requisitos
- Microsoft. Data.SqlClient 3.0 ou uma versão posterior.
- Uma cadeia de conexão para SQL Server, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure ou um banco de dados SQL no Microsoft Fabric.
Configurar um provedor de repetição de tentativas de conexão
Defina as opções de retentativa. Deixe
TransientErrorsasnullpara que o provedor use a lista de erros transitórios embutida.// 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) };Crie um provedor com as opções.
// Create a retry logic provider SqlRetryLogicBaseProvider provider = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(options);Atribua o provedor antes de abrir a conexão.
// 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();
NumberOfTries = 5 permite uma tentativa inicial e até quatro tentativas. O provedor exponencial aumenta o intervalo entre as tentativas e adiciona jitter aleatório.
MaxTimeInterval limita cada atraso individual, não o tempo total decorrido para todas as tentativas.
Configurar novas tentativas de comando
Crie um provedor separado e o atribui a SqlCommand.RetryLogicProvider. Defina SqlRetryLogicOption.AuthorizedSqlCondition para um predicado que retorna true apenas para comandos que sua aplicação pode repetir com segurança.
Caution
Um provedor embutido não tenta novamente um comando quando a conexão tem uma transação ativa. Se uma falha transitória invalidar uma transação, volte para trás e tente toda a transação novamente. Não tente executar novamente apenas a instrução que falhou.
A configuração SqlRetryLogicOption.TransientErrors substitui a lista de erros embutida do driver. Para estender a linha de base sem perder os padrão, veja Estender a lista de erros transitórios embutida.