我正在尝试通过 c# 代码运行我的 azure web 作业,但它可以工作,但它返回带有 202 状态代码的接受状态。
我将以下代码用于来自 Web 应用程序的 webjob api 调用的相同代码片段。
听起来您可能怀疑 HTTP 响应状态代码应该是200 OK
,而不是202 Accepted
HTTP 请求是否已成功处理。但是,要么200 OK
或要么202 Accepted
是合法合理的,请参阅10 Status Code Definitions
W3C RFC-2616 的 10 部分以深入了解它们,如下所示。
10.2.1 200 OK请求成功。响应返回的信息取决于请求中使用的方法,例如:
GET 在响应中发送与请求的资源对应的实体;
HEAD 请求资源对应的实体头字段在响应中发送,不带任何消息体;
POST 描述或包含操作结果的实体;
TRACE 包含终端服务器收到的请求消息的实体。
10.2.3 202 Accepted请求已被接受处理,但处理尚未完成。该请求最终可能会或可能不会被执行,因为在实际进行处理时它可能会被禁止。无法从诸如此类的异步操作中重新发送状态代码。
202 响应是故意不置可否的。它的目的是允许服务器接受对其他进程的请求(可能是一个每天只运行一次的面向批处理的进程),而不需要用户代理与服务器的连接持续到进程完成。与此响应一起返回的实体应该包括请求当前状态的指示以及指向状态监视器的指针或用户可以期望何时完成请求的一些估计。
同时,下面来自 GitHub Kudu 存储库的两条代码注释解释了为什么202 Accepted
在这里触发 webjobs。
一、Kudu.Services/ServiceHookHandlers/FetchHandler.cs#L111
// Return a http 202: the request has been accepted for processing, but the processing has not been completed.
二、Kudu.Services/Jobs/JobsController.cs#L191
// Return a 200 in the ARM case, otherwise a 202 can cause it to poll on /run, which we don't support
// For non-ARM, stay with the 202 to reduce potential impact of change
这取决于服务的设计意图。