如何在 Angular 4 中处理长时间的请求



我在 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 方法

最新更新