如何在Azure函数中手动将调用标记为失败?

imb*_*eek 7 azure csx azure-functions

我尝试了很多东西,但是我可以强制AzFn理解调用失败的唯一方法是抛出异常而不处理它.因此,如果我返回一个HttpResponseException,AzFn会认为调用是成功的.那感觉不对.

catch (Exception ex)
    {
        logger.Error($"{nameof(ex)}: {ex.Message}", ex);
        response = req.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message, ex);

    }
Run Code Online (Sandbox Code Playgroud)

这应该产生一个标记为失败的调用,但它不会.

mat*_*ewc 13

从您的函数抛出的任何异常都会将该函数标记为失败.在上面的代码中,你吞下了异常,所以我们认为它是成功的.如果您改为重新抛出异常,该函数将被标记为失败.在这种情况下,我们会代表您自动退回500.

我们不会看HttpStatusCode你返回以确定函数是否成功,只是函数是否成功运行完成没有异常.如果您的函数能够返回响应,那么从我们的角度来看它是成功的.

  • @mathewc 现在还是这样吗?我们需要向调用者返回一条有用的消息,同时将函数标记为“失败”。将“return”和“throw”结合起来是不可能的。 (3认同)
  • 这是有道理的,但似乎如果您抛出未捕获的异常以将作业标记为失败,则输出绑定将被忽略。 (2认同)
  • 我认为这没有用。在异常情况下,理想情况下,人们希望向调用者返回简短且有用的响应,同时仍然记录异常并将该请求标记为失败。 (2认同)
  • 我完全同意@NitinBadole。当前的机制具有误导性。 (2认同)