Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: .NET Framework
.NET
.NET Standard
Este artigo mostra como criar um provedor de repetição exponencial e atribuí-lo a um SqlConnection. O fornecedor tenta novamente a lista incorporada do driver de erros de ligação transitórias e tenta abrir a ligação até cinco vezes.
Pré-requisitos
- Microsoft. Data.SqlClient 3.0 ou uma versão posterior.
- Uma cadeia de ligação para SQL Server, Base de Dados SQL do Azure, Azure SQL Managed Instance ou uma base de dados SQL no Microsoft Fabric.
Configurar um mecanismo de repetição de tentativas de ligação
Defina as opções de retentativa. Deixe
TransientErrorscomonullpara que o fornecedor use a lista de erros transitórios incorporada.// 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 fornecedor a partir das 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 fornecedor exponencial aumenta o intervalo entre tentativas e adiciona o jitter aleatório.
MaxTimeInterval limita cada atraso individual, não o tempo total decorrido para todas as tentativas.
Configurar repetições do comando
Crie um fornecedor separado e atribua-o a SqlCommand.RetryLogicProvider. Defina SqlRetryLogicOption.AuthorizedSqlCondition para um predicado que retorne true apenas para comandos que a sua aplicação possa repetir em segurança.
Caution
Um fornecedor incorporado não tenta novamente um comando quando a ligação tem uma transação ativa. Se uma falha transitória invalidar uma transação, reverta e tente novamente toda a transação. Não volte a tentar apenas a afirmação falhada.
A definição de SqlRetryLogicOption.TransientErrors substitui a lista de erros integrada do controlador. Para estender a linha de base sem perder os predefinidos, veja Estender a lista de erros transitórios incorporada.