我在IIS7上运行了一个C#ASP.NET Webforms网站。它是一个报表创建应用程序,用于查询SQL数据库,获取数据,将其解析为excel文档。
查询本身不会花太长时间,但是当查询非常大(50,000行)时,写入excel需要一段时间。
现在针对这个问题,当我运行报告应用程序时,我会在几分钟内收到报告,但是当某些用户运行它时,报告会返回502 Bad Gateway。 这仅适用于大型报告。
我认为它与超时有关?即使我改变了哪个超时命令,网关错误也会在两分钟内出现。
答案 0 :(得分:0)
你能得到502错误的子目录(来自IIS日志)吗?
另外,不确定你是怎么做的,但看看下面的问题(下面链接),看看如何快速写入Excel范围。使用互操作方法是非常缓慢的。如果你是,那么改变这个策略可能会帮助你解决问题。
答案 1 :(得分:0)
问题与内存有关,我们必须更改架构。自那时以来,我们已移至专用的报表服务器,并将报表分为不同的部分(即不同的时间范围),并在完成每个报表后再次将它们合并。这可以通过Azure队列和Blob存储轻松实现。报告也通过电子邮件发送,而不是通过HTTP调用返回。
答案 2 :(得分:0)
在构建大型报告时,我在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信息服务”对话框中,展开本地计算机>“站点”,然后右键单击“默认网站”,然后选择“管理网站”>“高级设置”。展开“连接限制”,将“超时”值更改为XXXX,然后单击“确定”。