5

我有一个在 IIS7 上运行的 C# ASP.NET Webforms 网站。它是一个报表创建应用程序,用于查询 SQL Server 数据库、获取数据、将其解析为 Excel 文档。

查询本身不会花费太长时间,但是当查询非常大(50,000 行)时,写入 Excel 需要一段时间。

现在的问题是,当我运行报告应用程序时,我会在几分钟内得到报告,但是当一些用户运行它时,报告会返回 502 Bad Gateway。这只发生在大型报告中。

我认为它与超时有关?即使无论我更改哪个超时命令,网关错误都会在两分钟内出现。

4

2 回答 2

4

在构建大型报告时,我在 ASP.NET Core 上遇到了相同的错误 502。我的问题不是内存不足。日志显示,当我收到错误 502 时,该过程没有中断,并且它会继续构建报告直到结束。错误的原因是 IIS 超时。如果我将“requestTimeout”设置为:

<aspNetCore requestTimeout="00:20:00" processPath=".\xxx.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout">
</aspNetCore>

在 web.config 中,因此对于本地 URL(使用 localhost)- 错误 502 将消失,我会收到所有报告,甚至是巨大的,但对于外部 URL(使用域名)超时仍然相同 - 120 秒和 502 错误. web.config 中的 RequestTimeout 和下一个设置完全解决了我的问题:在 Internet 信息服务对话框中,展开本地计算机 > 站点并右键单击默认网站并选择管理网站 > 高级设置。展开 Connection Limits,将 Time-out 值更改为 XXXX,然后单击 OK。

于 2019-12-12T09:24:27.470 回答
1

这个问题与内存有关,我们不得不改变架构。从那时起,我们转移到了专用的报表服务器,并将报表分成不同的部分(即不同的时间范围),并在每个报表完成后再次组合它们。这可以通过 Azure 队列和 Blob 存储轻松实现。报告也会通过电子邮件发送,而不是在 HTTP 调用中返回。

于 2019-07-23T18:18:10.690 回答