Http 502异步请求达到2分钟时网关损坏

Http 502异步请求达到2分钟时网关损坏,http,httprequest,httpresponse,gateway,bad-gateway,Http,Httprequest,Httpresponse,Gateway,Bad Gateway,下面描述的问题不会发生在本地开发上,只有在我将所有内容部署到测试环境(托管在Azure Web App上)之后才会发生 从Angular调用API端点时(我在请求中使用Observer和subscribe),请求会被处理,有时处理时间可能会超过2分钟。当请求到达2分钟时,我立即得到一个502坏网关,而异步过程一直持续到完成 在请求处理过程中,我执行了两次远程powershell脚本执行,确保两个powershell方法都异步运行,并确保API端点是异步的。在我做请求的角度前端,我使用observ

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

从Angular调用API端点时(我在请求中使用Observer和subscribe),请求会被处理,有时处理时间可能会超过2分钟。当请求到达2分钟时,我立即得到一个502坏网关,而异步过程一直持续到完成

在请求处理过程中,我执行了两次远程powershell脚本执行,确保两个powershell方法都异步运行,并确保API端点是异步的。在我做请求的角度前端,我使用observer并订阅所做的请求

我的下一步是想发出某种请求,开始这个过程,然后以某种方式继续请求,直到我得到一个响应,该响应已经完成,以避免502错误,但我不知道从何处开始或如何开始,但我不知道这种方法是否确实可行

后端使用C#,.NET Core 2.2进行设置。前端有角度(7?)

我希望得到预期的响应,而不是每次处理时间达到2分钟时就点击502坏网关

代码:

我先打电话

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()
  })
});
processObjectsForMerge(请求:ProcessObjectsForMergeRequest):可观察{
返回this.http.post(this.API_URL+'/Object/ProcessObjectsForMerge',req{
标题:新的HttpHeaders({
“内容类型”:“应用程序/json”,
“授权”:“承载者”+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});
    }
[HttpPost]
[路由(“ProcessObjectsForMerge/”)
公共异步任务ProcessObjectsFormer([FromBody]ProcessMergeRequestModel请求)
{
if(request==null | | string.IsNullOrEmpty(request.VersionNumber)| | string.IsNullOrEmpty(request.CuLevel))返回BadRequest(“验证数据失败”);
var permissiongrated=DoesUserHavePermissionForRequest(request.ShortGuid);
如果(!permissiongrated)返回BadRequest();
var issusccessful=等待新的ProcessObjectsForMergeService()。进程(请求);
var message=!issusccessful?“无法处理要合并的对象。”:“已成功处理要合并的对象。”;
返回Ok(新的{消息,日志});
}
更新: 我找到了一个临时解决方案,在API的web.config中,我可以增加超时时间。
我觉得这是一个糟糕的做法,所以我将实现一个消息队列(可能使用rabbitMQ)来执行我最初的想法,看看如何解决它,看看它是否按照我期望的方式工作

这对我有用,谢谢。