当运行webjob时出现任何错误或异常时,azure webjob的行为如何



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

有两种方法可以处理此问题:

1( Try/Catch方法:-您可以在Catch块中触发邮件或任何操作。在catch块中,您可以将异常的信息发送到您的邮件帐户,甚至可以写入任何DB表或将其添加到任何队列。

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,您可以参考此wiki。如果需要,您可以发送电子邮件通知,也可以执行您编写的方法。在文档中,您可以找到一些代码示例的详细信息。

至于异常,您可以捕获异常并使用try catch进行处理。

最新更新