Как ведут себя веб-задания Azure, если при запуске веб-задания возникает какая-либо ошибка или исключение?
Я хочу освободить все объекты, если возникнет какое-либо исключение или ошибка при запуске веб-задания. Как я могу узнать, произошла ли ошибка. Есть ли ошибка при работе с webjob?
2 ответа
Для этого может быть два подхода:
1) Метод Try/Catch:- Вы можете вызвать почту или любое действие в блоке catch. В блоке catch вы можете отправить информацию об исключении, которое вы получили, на свою почтовую учетную запись или даже написать в любую таблицу БД или добавить ее в любую очередь.
2) Фильтр функций:- Вы можете использовать фильтр функций, который имеет атрибут фильтра исключений функций, который вызывается в любой исключительной ситуации. Вы можете найти подробности здесь: https://github.com/Azure/azure-webjobs-sdk/wiki/Function-Filters
Также есть фрагмент кода, откуда вы можете взять ссылку:
public class ErrorHandlerAttribute : FunctionExceptionFilterAttribute
{
public override async Task OnExceptionAsync(FunctionExceptionContext exceptionContext, CancellationToken cancellationToken)
{
string body = $"ErrorHandler called. Function '{exceptionContext.FunctionName}': {exceptionContext.FunctionInstanceId} failed. ";
CombineErrorWithAllInnerExceptions(exceptionContext.Exception, ref body);
string[] emailList = System.Configuration.ConfigurationManager.AppSettings["SendErrorEmails"].Split(';');
await SendEmail.SendErrorNotificationAsync("WebJob - Common Driver Error", body);
}
private void CombineErrorWithAllInnerExceptions(Exception ex, ref string error)
{
error += $"ExceptionMessage: '{ex.Message}'.";
if (ex is Domain.BadStatusCodeException)
{
error += $"Status code: {((Domain.BadStatusCodeException)ex).StatusCode}";
}
if (ex.InnerException != null)
{
error += $"InnerEx: ";
CombineErrorWithAllInnerExceptions(ex.InnerException, ref error);
}
} }
Вы можете вызвать его, украсив свой метод атрибутом "ErrorHandler". Таким образом, в случае любого исключения будет вызвана функция "OnExceptionAsync".
Есть ли триггер ошибок при работе с webjob?
Около ErrorTrigger
Вы могли бы обратиться к этой вики. Вы можете отправить уведомление по электронной почте, если вам нужно, или вы можете выполнить метод, который вы пишете. В документе вы можете найти некоторые примеры кода.
Что касается исключения, вы можете ловить исключения и обрабатывать их с помощью try catch
,