SqlRetryLogicBaseProvider использует другой механизм повтора для подключения и команды.C#

Место общения программистов C#
Anonymous
SqlRetryLogicBaseProvider использует другой механизм повтора для подключения и команды.

Сообщение Anonymous »

Я использую SqlRetryLogicBaseProvider для определения своих повторных попыток для приложения Win Forms SQL Azure .Net Framework 4.8. Я только начинаю понимать основные механизмы, выполняя простые тесты на отключение. Я обнаружил, что на мое соединение не отвечают, когда я отключаю Интернет. Когда я отключаюсь после открытия соединения, моя команда повторяется, но только один раз. Выдается исключение:
(поставщик: TCP-провайдер, ошибка: 0 – попытка подключения не удалась, поскольку подключенная сторона не ответила должным образом по истечении определенного периода времени, или установка соединения не удалась из-за подключения хост не ответил.) (Microsoft SQL Server, ошибка: 10060)
Почему попытки подключения и повторы команд обрабатываются по-разному для одного и того же провайдера? Почему соединение вообще не повторяется, а команда повторяется только один раз, а не 5 раз?
Вот мой код:
var options = new SqlRetryLogicOption()
{
// Tries 5 times before throwing an exception
NumberOfTries = 5,
// Preferred gap time to delay before retry
DeltaTime = TimeSpan.FromSeconds(5),
// Maximum gap time for each delay time before retry
MaxTimeInterval = TimeSpan.FromSeconds(60),
TransientErrors = new List { -1, -2, 0, 109, 233, 997, 1222, 10060, -2146232060, 596 }
};

// Create a retry logic provider
SqlRetryLogicBaseProvider provider = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(options);
provider.Retrying += (object s, SqlRetryingEventArgs e) =>
{
Helper.ErrorMessage(String.Format("[{0}] SQL: Retrying for {1} times - Error code: {2}, Delay: {3}", DateTime.Now, e.RetryCount, (e.Exceptions[0] as SqlException).Number, e.Delay));
}

try
{
using (var connection = new SqlConnection(ConnectionString))
{
//retry connection:
connection.RetryLogicProvider = provider;
connection.Open();

// SqlParameter parameter;
const string selectCmd = "SELECT data FROM mydata WHERE dataID = @dataID";

using (var command = new SqlCommand(selectCmd, connection))
{
SqlParameter parameter = new SqlParameter("@dataID", SqlDbType.NVarChar, 9);
parameter.Value = did;
command.Parameters.Add(parameter);
// set retry for command:
command.RetryLogicProvider = provider;

SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Console.WriteLine("{0}", reader.GetString(0));
}
}
}
}
catch (Exception ex)
{
return String.Empty;
}


Подробнее здесь: https://stackoverflow.com/questions/789 ... n-and-comm

Вернуться в «C#»