IIS 10 上的并发文件上传永远不会成功并冻结用户会话

Concurrent files uploads on IIS 10 never succeed and freeze the user session

配置:

Windows 服务器 2016 4Gb 内存,ASP.NET MVC 5,IIS-10,每个 request:30M

的最大上传大小

问题:

当异步上传5个500Ko图片文件时,用户会话冻结,上传永远不会成功。如果我尝试从同一个浏览器访问该网站的另一个页面,它就会挂起。从另一个浏览器,我可以访问该网站的任何页面。用户会话挂起,直到我在 IIS 中重新启动网站。

一旦我重新启动网站,所有上传都会恢复上传并像往常一样成功,用户可以再次访问网站的所有页面。

到目前为止我尝试了什么:

  1. 最多4张500Ko的图片,效果很好。 如果我改为每张拍摄 5M 的图像,则它适用于 1 次上传,但不适用于 2 次并发上传。
  2. 如果我 运行 在我本地计算机上的网站,它工作正常。

有什么想法会导致这种情况吗?
谢谢!

根据您的描述,我猜您可能遇到了会话锁定问题。建议您尝试debugdiag抓取dump文件,分析dump文件找出原因。

调试诊断下载 link: https://www.microsoft.com/en-us/download/details.aspx?id=49924

步骤: 1. 打开 debugdiag 和 select 性能。

  1. 下一步,select HTTP 响应时间

  2. 点击下一步,添加超时值url

  3. 单击下一步,然后单击将转储目标和 select 目标类型添加到 Web 应用程序池和 select 正确的应用程序池
  4. 点击下一步,select完全转储,点击下一步
  5. 输入转储规则名称,然后单击下一步

更多详情,您可以参考以下文章: https://support.microsoft.com/en-ca/help/919792/how-to-use-the-debug-diagnostics-tool-to-troubleshoot-a-process-that-h

我遇到了完全相同的问题,Brando 的回答帮助我找到了解决方案。

尝试将 [SessionState(SessionStateBehavior.Disabled)] 添加到控制器处理您的图片上传的行上方。

像这样:

[SessionState(SessionStateBehavior.Disabled)]
public class ImagesController : Controller
{

}