0

如果在运行 webjob 中发生任何异常或错误,我想释放所有对象。我如何知道是否发生错误。是否有任何错误触发器与 webjob 一起使用?

4

2 回答 2

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”函数。

于 2018-11-29T04:15:55.403 回答
0

是否有任何错误触发器与 webjob 一起使用?

关于ErrorTrigger你可以参考这个wiki。如果需要,您可以发送电子邮件通知,也可以执行您编写的方法。在文档中,您可以找到一些代码示例详细信息。

至于异常,您可以捕获异常并使用try catch.

于 2018-11-26T08:10:09.693 回答