为什么webjobs api总是返回“已接受”状态而不是200 OK

时间:2018-11-26 12:30:57

标签: c# api azure webjob

我正在尝试通过c#代码运行我的Azure Web作业,但是它可以工作,但是它返回带有202状态代码的接受状态。

我正在将以下代码用于从Web应用程序调用webjob api的相同代码段。

Code snippet for webjob api call from web app

1 个答案:

答案 0 :(得分:0)

听起来好像您可能会怀疑HTTP响应状态代码应为200 OK,而不是202 Accepted,如果已成功处理HTTP请求。但是,200 OK202 Accepted是合法且合理的,请参阅W3C RFC-2616的第10节10 Status Code Definitions,以深入了解它们,如下所示。

  

10.2.1 200 OK (请求成功)。响应返回的信息取决于请求中使用的方法,对于   例如:

     

获取与所请求资源相对应的实体,该实体在   反应;

     

HEAD与请求的资源相对应的实体标题字段   在响应中发送而没有任何消息正文;

     

发布一个描述或包含操作结果的实体;

     

TRACE包含最后收到的请求消息的实体   服务器。

     

10.2.3 202已接受:请求已接受处理,但是处理尚未完成。该请求可能会或可能不会   最终会采取行动,因为处理时可能不允许这样做   实际发生。没有重新发送状态的功能   这样的异步操作编写代码。

     

202响应是有意拒绝的。其目的是   允许服务器接受对其他进程的请求(也许是   每天仅运行一次的面向批处理的过程,无需   要求用户代理与服务器的连接持续到   该过程完成。该实体返回此响应   应该包括请求当前状态的指示,以及   指向状态监视器的指针或用户何时的某种估计   可以期望请求能够得到满足。

同时,下面来自GitHub Kudu仓库的两个代码注释解释了为什么在这里使用202 Accepted来触发webjobs。

I。 Kudu.Services/ServiceHookHandlers/FetchHandler.cs#L111

// Return a http 202: the request has been accepted for processing, but the processing has not been completed.

II。 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

这取决于服务的设计意图。