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 中重新启动网站。
一旦我重新启动网站,所有上传都会恢复上传并像往常一样成功,用户可以再次访问网站的所有页面。
到目前为止我尝试了什么:
- 最多4张500Ko的图片,效果很好。
如果我改为每张拍摄 5M 的图像,则它适用于 1 次上传,但不适用于 2 次并发上传。
- 如果我 运行 在我本地计算机上的网站,它工作正常。
有什么想法会导致这种情况吗?
谢谢!
根据您的描述,我猜您可能遇到了会话锁定问题。建议您尝试debugdiag抓取dump文件,分析dump文件找出原因。
调试诊断下载 link: https://www.microsoft.com/en-us/download/details.aspx?id=49924
步骤:
1. 打开 debugdiag 和 select 性能。
下一步,select HTTP 响应时间
点击下一步,添加超时值url
- 单击下一步,然后单击将转储目标和 select 目标类型添加到 Web 应用程序池和 select 正确的应用程序池
- 点击下一步,select完全转储,点击下一步
- 输入转储规则名称,然后单击下一步
更多详情,您可以参考以下文章:
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
{
}
配置:
Windows 服务器 2016 4Gb 内存,ASP.NET MVC 5,IIS-10,每个 request:30M
的最大上传大小问题:
当异步上传5个500Ko图片文件时,用户会话冻结,上传永远不会成功。如果我尝试从同一个浏览器访问该网站的另一个页面,它就会挂起。从另一个浏览器,我可以访问该网站的任何页面。用户会话挂起,直到我在 IIS 中重新启动网站。
一旦我重新启动网站,所有上传都会恢复上传并像往常一样成功,用户可以再次访问网站的所有页面。
到目前为止我尝试了什么:
- 最多4张500Ko的图片,效果很好。 如果我改为每张拍摄 5M 的图像,则它适用于 1 次上传,但不适用于 2 次并发上传。
- 如果我 运行 在我本地计算机上的网站,它工作正常。
有什么想法会导致这种情况吗?
谢谢!
根据您的描述,我猜您可能遇到了会话锁定问题。建议您尝试debugdiag抓取dump文件,分析dump文件找出原因。
调试诊断下载 link: https://www.microsoft.com/en-us/download/details.aspx?id=49924
步骤:
1. 打开 debugdiag 和 select 性能。
下一步,select HTTP 响应时间
点击下一步,添加超时值url
- 单击下一步,然后单击将转储目标和 select 目标类型添加到 Web 应用程序池和 select 正确的应用程序池
- 点击下一步,select完全转储,点击下一步
- 输入转储规则名称,然后单击下一步
更多详情,您可以参考以下文章: 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
{
}