[502异步请求命中2分钟时网关错误

问题描述 投票:1回答:1

下面描述的问题在本地开发中不会发生,只有在我将所有内容都部署到测试环境(托管在Azure Web App上)之后,该问题才会出现。>>

[当从Angular调用API端点时(我使用Observer并在请求上进行订阅),将处理请求,有时可能需要2分钟以上的时间来处理。当请求达到2分钟时,我立即得到一个502错误的网关,而异步过程一直持续到完成。

在请求处理中,我执行了一些远程powershell脚本执行,我确保了我的两个powershell方法都是异步运行的,并确保API端点是异步的。在我进行请求的位置的前端,我使用观察器并订阅了所提出的请求。

我的下一步是要发出某种请求,该请求只是开始该过程,然后能够以某种方式继续请求,直到得到响应完成的响应为止,以避免502错误,但我不知道从哪里开始或如何开始,但我不知道这种方法是否可以肯定地工作。

后端是使用C#、. NET Core 2.2设置的。前端是Angular(7?)。

我想获得预期的响应,而不是每次处理达到2分钟时都遇到502 Bad Gateway。

代码:

我先打电话

this.objectService.processObjectsForMerge(request).subscribe(res => {});

从服务中,准备以下请求

processObjectsForMerge(req: ProcessObjectsForMergeRequest): Observable<ProcessObjectsForMergeResponse>{
return this.http.post<ProcessObjectsForMergeResponse>(this.API_URL + '/Object/ProcessObjectsForMerge',req, {
  headers: new HttpHeaders({
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + this.auth.getAccessToken()
  })
});

}

并且在以下端点中被接收

    [HttpPost]
    [Route("ProcessObjectsForMerge/")]
    public async Task<IActionResult> ProcessObjectsForMerge([FromBody] ProcessMergeRequestModel request)
    {
        if (request == null || string.IsNullOrEmpty(request.VersionNumber) || string.IsNullOrEmpty(request.CuLevel)) return BadRequest("Failed to validate data");

        var permissionGranted = DoesUserHavePermissionForRequest(request.ShortGuid);
        if (!permissionGranted) return BadRequest();

        var isSuccessful = await new ProcessObjectsForMergeService().Process(request);
        var message = !isSuccessful ? "Failed to process objects for merge." : "Successfully processed the objects for merge.";

        return Ok(new {message, log});
    }

更新:

我在API的web.config中找到了一个临时解决方案,可以增加超时时间。我觉得这是不好的做法,所以要实现一个消息队列(可能使用rabbitMQ)来执行我最初的想法,以解决它,看看它是否按我期望的方式工作。

下面描述的问题在本地开发中不会发生,只有在我将所有内容都部署到测试环境之后,该问题才托管在Azure Web App上。从Angular(...

http httprequest httpresponse gateway bad-gateway
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.