Http 502异步请求达到2分钟时网关损坏
下面描述的问题不会发生在本地开发上,只有在我将所有内容部署到测试环境(托管在Azure Web App上)之后才会发生 从Angular调用API端点时(我在请求中使用Observer和subscribe),请求会被处理,有时处理时间可能会超过2分钟。当请求到达2分钟时,我立即得到一个502坏网关,而异步过程一直持续到完成 在请求处理过程中,我执行了两次远程powershell脚本执行,确保两个powershell方法都异步运行,并确保API端点是异步的。在我做请求的角度前端,我使用observer并订阅所做的请求 我的下一步是想发出某种请求,开始这个过程,然后以某种方式继续请求,直到我得到一个响应,该响应已经完成,以避免502错误,但我不知道从何处开始或如何开始,但我不知道这种方法是否确实可行 后端使用C#,.NET Core 2.2进行设置。前端有角度(7?) 我希望得到预期的响应,而不是每次处理时间达到2分钟时就点击502坏网关 代码: 我先打电话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
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)来执行我最初的想法,看看如何解决它,看看它是否按照我期望的方式工作 这对我有用,谢谢。