IIS重新启动服务器中的文件删除/存储操作并丢失会话

时间:2010-12-15 10:50:02

标签: c# asp.net iis

我有一个文件删除选项,用户上传的文件,用户可以一次上传多个文件。上传的文件将存储在服务器的文件夹中,当它被删除时,它被移动到垃圾文件夹从哪里它将被手动清除。

当用户尝试删除网页中的许多文件时,IIS会挂起并且所有会话都已过期。此情况仅出现在服务器中,在本地主机中此问题不可用。

所有操作都完全执行,即

  • 数据库已更新。

  • 文件从上传文件夹移至 服务器中的垃圾文件夹。

我无法确定出现了什么问题,我只是试图删除大约35-36 MB的文件。进程的问题是否需要很长时间或是否需要进行任何更改才能执行大文件操作,我的项目是在VS2005上完成的,它运行在2008服务器请帮助...

3 个答案:

答案 0 :(得分:3)

如果删除网站或虚拟目录下的文件/文件夹,将重新启动您的Web应用程序,从而消除所有(进程中)会话。解决方案非常简单 - 确保将文件存储在网站目录之外。

答案 1 :(得分:1)

备用解决方案:通过将SQL Server用作状态管理器或使用ASP.Net状态管理器服务,将会话状态与进程分离。这将要求所有会话对象都是可序列化的。

http://msdn.microsoft.com/en-us/library/ms972429.aspx(参见会话配置)

答案 2 :(得分:0)

旧帖子,但在其他论坛上找到了一个解决方案,以便在搜索后仍然在这里结束...

http://forums.asp.net/p/1144478/1849837.aspx

PropertyInfo p = typeof(System.Web.HttpRuntime).GetProperty("FileChangesMonitor", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static);
object o = p.GetValue(null, null);

FieldInfo f = o.GetType().GetField("_dirMonSubdirs", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.IgnoreCase);
object monitor = f.GetValue(o);

MethodInfo m = monitor.GetType().GetMethod("StopMonitoring", BindingFlags.Instance | BindingFlags.NonPublic);
m.Invoke(monitor, new object[] { });

..并将其添加到一个好地方,例如global.asax

中的Application_Start

您必须将“using System.Reflection”添加到Global.asax.cs