我有一个 ASP.NET MVC2 Web 应用程序,与 SQL Server 2008 R2 配合使用,并在 IIS 6.2 上运行。我有一个功能,其中一位特定管理员需要上传大约 5000 个文档,然后这些文档将被处理并存储在服务器中,同时它们的名称将保存在数据库中。
问题是,在客户端,文件上传开始 10 分钟后,我收到:错误 504 超时,网关超时。我更改了 web.config 中的 httpRuntime.ExecutionTimeout 值,但问题并未解决。
有谁知道限制我的值存储在哪里?
这是我的 web.config 文件:http://pastebin.com/VXs0BFTp
编辑:此外,收到错误 504 后,数据库中的数据存储仍会继续。
答案1
从您的描述来看,您的客户端 -> Web 服务器连接超时很可能与代理使用有关。如果您的服务器处理文件的时间超过 10 分钟,则您的客户端无法及时收到响应,但 Web 服务器可以进一步处理。
httpRuntime.ExecutionTimeout指定在关闭之前允许 IIS 线程处理请求的数量,因此它不会对您的问题产生任何影响。
如果您无法优化服务器端的文件处理,我的建议是重新设计。一种可能的方法是上传所有文件,尽快响应客户端并异步处理。当然,客户端 UI 应该进行更改,以便能够显示处理状态(例如以百分比表示)。
如果上传过程耗时太长(例如几分钟),解决方案可能是让管理员将文件传输到网络位置,然后开始处理(Web 服务器应该有权从该位置读取)。这不是非常用户友好,但管理员不是普通用户。