msi*_*vri 6 c# asp.net iis http-error
我有一个在 IIS7 上运行的 C# ASP.NET Webforms 网站。它是一个报告创建应用程序,用于查询 SQL Server 数据库、获取数据并将其解析为 Excel 文档。
查询本身不会花费太长时间,但当查询非常大(50,000 行)时,写入 Excel 需要一段时间。
现在的问题是,当我运行报告应用程序时,我会在几分钟内收到报告,但是当某些用户运行它时,报告会返回 502 Bad Gateway。这只发生在大型报告中。
我认为这与超时有关?即使我更改哪个超时命令,网关错误也会在两分钟内出现。
我在构建大型报告时在 ASP.NET Core 上遇到相同的错误 502。我的问题不在于内存不足。日志显示,当我收到错误 502 时,该过程并未中断,并且它会继续构建报告直到结束。错误原因是 IIS 超时。如果我将“requestTimeout”设置为:
<aspNetCore requestTimeout="00:20:00" processPath=".\xxx.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout">
</aspNetCore>
Run Code Online (Sandbox Code Playgroud)
在 web.config 中,因此对于本地 URL(带有 localhost) - 错误 502 将消失,我将得到所有报告,甚至是巨大的报告,但对于外部 URL(带有域名)超时仍然相同 - 120 秒和 502 错误。web.config 中的 RequestTimeout 和接下来的设置完全解决了我的问题:在“Internet 信息服务”对话框中,展开“本地计算机”>“站点”,右键单击“默认网站”,然后选择“管理网站”>“高级设置”。展开连接限制,将超时值更改为 XXXX,然后单击确定。
更新: 还有第三个附加选项应该增加限制。在 IIS 中选择您的站点。在底部面板上打开配置编辑器。在编辑器顶部选择 system.web/httpRuntime。找到选项“executionTimeout”并设置新值。
这个问题与内存有关,我们必须改变架构。从那时起,我们已经转向专用的报告服务器,并将报告分成不同的部分(即不同的时间范围),并在每个报告完成后再次将它们组合起来。这可以通过 Azure 队列和 Blob 存储轻松实现。报告也会通过电子邮件发送,而不是通过 HTTP 调用返回。
| 归档时间: |
|
| 查看次数: |
11368 次 |
| 最近记录: |