我在 Angular 4 中有一个请求,这需要很长时间。后端位于连接到Oracle DB的.Net Core 2.0中。它应该等待在数据库中运行长查询以获取数据并将其发送到客户端。但是,客户端似乎无法等到过程结束(所有记录的返回),我得到的是错误:
无法加载资源:服务器以状态 502 响应 (网关错误)
当 CGI 应用程序未返回有效集时,会发生此错误 的 HTTP 标头,或者当代理或网关无法发送 请求父网关。您可能需要获取网络跟踪或 如果不是 CGI 问题,请与代理服务器管理员联系。
这不是超时错误,正如我所认为的那样。这是我请求的代码:
exportExcel(dadosConsulta: DadosConsultaModel) : Promise<any>{
let url ="/api/Relatorios/exportToExcel";
return this.http
.post(url, JSON.stringify(dadosConsulta),{ headers: this.headers })
.timeout(500000)
.toPromise()
.then(data => data.json())
.catch(this.handleError);
}
如何防止这种情况发生?
我使用过 oracle、长时间的请求查询和可观察量,但没有这个问题。
像这样的东西
login(account: string, password: string, user: string): Observable <any> {
let body = new URLSearchParams();
body.set('account', account);
body.set('password', password);
body.set('user', user);
return this.http.post(this.globalVars.apiUrl + 'login', body)
.map((res: any) => {
let result = res.json().data.result;
let data = res.json().data;
this.client.auth = {
authCode: result.authCode,
token: result.token,
};
this.firstLogin = data.firstLogin;
return this.client;
})
.catch((error: any) => {
console.log('error', error._body);
return Observable.throw(error._body);
})
.timeoutWith(25000, Observable.throw(new Error('Connection Error')))
}}
问题实际上来自IIS,为了解决这个问题,我必须向我的项目添加一个web.config(默认情况下不会创建)并修改"aspNetCore"标记,如下所示:
<aspNetCore **requestTimeout="00:20:00"** processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".logsstdout" forwardWindowsAuthToken="false"/>
从这篇文章中得到它: 长时间运行的超时 ASP.NET MVC 核心控制器 HTTPPost 方法