下面描述的问题在本地开发中不会发生,只有在我将所有内容都部署到测试环境(托管在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() }) });
}
并且在以下端点中被接收
我在API的web.config中找到了一个临时解决方案,可以增加超时时间。我觉得这是不好的做法,所以要实现一个消息队列(可能使用rabbitMQ)来执行我最初的想法,以解决它,看看它是否按我期望的方式工作。[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}); }
更新:
下面描述的问题在本地开发中不会发生,只有在我将所有内容都部署到测试环境之后,该问题才托管在Azure Web App上。从Angular(...