После какого типа исключений/сбоев экземпляр Azure Cloud выполняет перезапуск?

StackOverflow https://stackoverflow.com/questions/8800571

  •  25-10-2019
  •  | 
  •  

Вопрос

Насколько я помню, экземпляр роли должен автоматически выполнять перезапуск после сбоя/сбоя. Чтобы проверить это поведение, я написал приложение, которое обеспечивает соблюдение исключения вне памяти, и мое приложение потерпело крах. Экземпляр роли не выполнял перезапуск, потому что он все еще работал и в порядке - экземпляр просто перезагрузил время выполнения .NET.

Я пытаюсь выяснить, как экземпляр реагирует на разные ошибки. В моем случае перезапуск не был необходим. Какой тип ошибок/исключений (которые я могу применять) приведет к полному перезапуску экземпляра? Какой тип ошибок/исключений навсегда убил бы экземпляр?

Это было полезно?

Решение

Единственная причина, которая приводит к переработке (перезапущенной) экземпляра роли, - это когда Бежать метод Ролевая позиция выходы. Обычно это происходит, когда вы:

  1. Перевернут Бежать() Метод и
  2. Иметь невозможное исключение в коде программы, что приведет к Бежать() метод для выхода

Ваша роль, однако, будет переработать, а скорее повесить, когда вы включили сборник журналов IntelliTrace.

Шаблон по умолчанию для Webrole не переопределяется Бежать() Метод, оставляя таким образом реализацию по умолчанию, которая является «thread.sleep (-1);». Не существует (автоматического) события, которое бы вызвало бы автоматическую рециркуляцию роли Webrole. Если вы не сделаете что -то в своей ролевой точке, это приведет к выходу метода запуска. Эта автоматическая утилизация происходит только с рабочей борьбой, которая реализует метод run ().

Обновление 1 (акцидовать для комментариев 1)

run-Methoded of a RoleEntryPoint faces an error

Не только ошибка, но и такая ошибка (то есть невозможное исключение), которая приводит к выходу метода run ().

Более того, вы не можете просто переопределить run () в своей Webrole, потому что ваша RoleEntryPoint Descendat Lives в разных доменах приложения (даже другой процесс), затем ваше веб -приложение (поэтому оно не будет иметь представления об исключениях вашего приложения). Узнайте больше о полном хостинге и процессе IIS здесь.

Таким образом, для веб -роли у вас просто есть веб -приложение в полностью функциях IIS 7.0 / 7.5, что понятия не имеет, что это IIS является частью развертывания Azure. Global.asax - это ваше место для управления ошибками веб -приложений неразрушаемых веб -приложений в ASP.NET. Проверить этот вопрос, ответ, который дает хороший пример для обработчика Application_Error ().

Вы можете использовать RequestRecycle Статический метод типа RoleEnvironment для вручную требует переработки ролей в вашем методе Application_Error (). Однако не рекомендую вам это сделать. Я не вижу хорошей практики в перезапуске веб -сервера из -за ошибки приложения. Вы должны реализовать хорошую обработку исключений и стратегию регистрации ошибок, регулярный осмотр ваших журналов ошибок и предпринять действия, чтобы избежать критических ошибок, которые потребуют перезапуска сервера.

Какое у вас оригинальные намерения? Чтобы понять, когда роль будет автоматически переработана, или для моделирования вашего приложения, например, для автоматического переработки вашей роли при ошибке? Если это последнее, я предлагаю вам пересмотреть свои бизнес -требования/логику.

Обновление 2

Я не могу говорить изо рта Нила, но «неудача экземпляра» - это все, что может привести к виртуальной машине. Экземпляр в Windows Azure - это виртуальная машина Signle, которая размещает код вашего приложения (чтение этот пост в блоге Для получения подробного объяснения по размещению службы, роли, экземпляра). Ваше приложение запускается в ОС на основе Windows Server. Это виртуальная машина. Все может произойти - от сбоя аппаратного обеспечения на хосте, до общего программного обеспечения/сбоя водителя гостевой ОС. Не обязательно быть вашим кодом. Таким образом, если что -то произойдет, что приведет к сбою одного виртуальной машины - эта проблема автоматически решается тканью Windows Azure. Если это необходимо - ваш код автоматически развернут на другой виртуальной машине. И это происходит автоматически. Вы делаете нехтинг. Представьте себе, что жесткий диск, или модуль памяти сгорает, или сетевой интерфейс перестает реагировать - это лишь несколько простых проблем, которые могут привести к выходу из строя. Это сбой экземпляра.

Отказ в вашем коде - это то, о чем вы должны позаботиться. Все остальное - контроллер ткани Windows Azure заботится.

Обновление 3

  1. Что происходит с приложением ASP.NET в Webrole, если происходит исключение, и оно не обрабатывается? Будет ли приложение просто зависнуть в неопределенном состоянии («сломано»), пока я не буду искать его, или оно будет прекращено виртуальной машиной?

Этот вопрос совершенно не в масштабах! Что происходит с приложением ASP.NET в учетной записи общего хостинга? Или в локальной установке IIS? Сбой приложения для пользователя, чьи действия вызвали сбой. Худший корпус приложений переработка. Я никогда не видел «подвешенного» приложения ASP.NET. Не существует такой вещи, как «прекращенное приложение ASP.NET» или «сломанное». Если это общая ошибка, вызванная запуска приложения или первого запроса - приложение никогда не будет в сети. Если это ошибка, вызванная какой -то последовательности действий пользователя - пользователь увидит уродливое сообщение об ошибке и ничего более (если у вас нет соответствующего обработчика Application_error () в вашем Global.asax. Я думаю, что это достаточно объяснений, чтобы вопрос, не имея ничего делать с лазурной.

  1. Можете ли вы подумать о кусочке кода .NET в моем приложении, который может привести к сбою всей веб -роли, или это невозможно с управляемым кодом (кроме неизвестной ошибки в .NET)?

Ты смеешься? Этот код будет сбит вашу веб -роль и приведет к переработке:

RoleEnvironment.RequestRecycle()

Пожалуйста, примите этот вопрос, так как я не думаю, что чего -то не хватает. Кроме того, у него есть ответы, по крайней мере, на еще 4 вопроса, добавленные к первоначальному.

Финал

Там нет такой вещи, как «убить экземпляр навсегда».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top