Как перехватить RetryLimitExceeded при реализации политики повторных попыток

Я пытаюсь реализовать политику повторных попыток для временных ошибок в базе данных в Azure, но не понимаю, как отлавливать ошибки типа RetryLimitExceeded в этом конкретном контексте.

Чтобы уточнить - в статье ниже, посвященной msdn, описан процесс настройки этого как Entity Framework DbConfiguration, который был достаточно легким. Однако в нем также указывается, что мы должны обработать исключение RetryLimitExceeded, которое может быть выдано, если ошибка не связана с переходными процессами или если число попыток превышает предел.

https://msdn.microsoft.com/en-us/data/dn456835.aspx

Я не понимаю, как я должен ловить исключения - должен ли я обернуть SetExecutionStrategy в попытку try или я должен обрабатывать такого рода ошибки глобально? Или что-то другое?

public class IntranetDBConfiguration : DbConfiguration
{
    public IntranetDBConfiguration()
    {
        SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy()); //default is 5 retries up to 30 seconds.
    }
}

1 ответ

Решение

Да ты должен catch Исключение, где вы совершаете SaveChanges() для контекста. Вы можете попробовать что-то вроде этого.

try
{
    using (MyEntities context = new MyEntities ())
    {
        // do your code
        MyConfiguration.SuspendExecutionStrategy = true;
        context.Entity.Add(entity);
        context.SaveChanges();
    }
}
catch (Exception ex)
{
    logger.Warn("Connection error with database server.", ex);
}
finally
{
    //Enable retries again...
    MyConfiguration.SuspendExecutionStrategy = false;
}
Другие вопросы по тегам