Моя роль Azure забирает данные для обработки из базы данных — она содержит экземпляр System.Data.SqlClient.SqlConnection
, периодически создает экземпляр SqlCommand
и выполняет SQL-запрос.
Теперь время от времени (обычно раз в несколько дней) запуск запроса будет вызывать исключение SqlException
Сервис обнаружил ошибку при обработке вашего запроса. Пожалуйста, попробуйте еще раз. Код ошибки 40143. В текущей команде произошла серьезная ошибка. Результаты, если таковые имеются, должны быть отброшены.
Который я уже видел много раз, и теперь мой код перехватывает его, вызывает Dispose()
в экземпляре SqlConnection
, а затем повторно открывает соединение и повторяет запрос. Последнее обычно приводит к еще одному исключению SqlException
Время ожидания истекло. Время ожидания истекло до завершения операции или сервер не отвечает.
Это очень похоже на то, что сервер SQL Azure не отвечает или недоступен по какой-либо причине.
В настоящее время мой код не перехватывает последнее исключение, оно распространяется за пределы RoleEntryPoint.Run()
, и роль перезапускается. Перезапуск обычно занимает около десяти минут, и после его завершения проблема исчезает примерно на день.
Мне не нравится перезапуск моей роли - это занимает некоторое время, и функциональность моего сервиса затруднена. Я хотел бы сделать что-то умнее.
Какой должна быть стратегия решения этой проблемы? Должен ли я повторить запрос несколько раз и сколько раз и с каким интервалом? Должен ли я сделать что-то еще? Когда я сдаюсь и позволяю роли просто перезапуститься?