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

时间:2017-10-13 13:23:00

标签: c# asp.net angular post asp.net-core

我在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);
  }

如何防止这种情况发生?

2 个答案:

答案 0 :(得分:1)

我使用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')))
}}

答案 1 :(得分:0)

问题实际上来自IIS,为了解决这个问题,我不得不在我的项目中添加一个web.config(默认情况下不会创建)并修改“aspNetCore”#39;像这样的标签:

<script>$(".top-menu").load("menu.html");</script>

从这篇文章中得到:Timeouts with long running ASP.NET MVC Core Controller HTTPPost Method