创建和删除文件夹时MVC会话丢失

时间:2013-11-29 06:31:04

标签: c# asp.net .net asp.net-mvc session

我正在运行一个MVC4 asp.net应用程序,它处理app文件夹中的create / delete文件夹。

当应用创建或删除文件夹时会话停留。

但是当应用创建一个文件夹然后一个接一个地删除时,会话就丢失了。

我已将此片段放在Global.asax中作为维护会话的决心,即使应用内的物理文件夹发生了变化:

PropertyInfo p = typeof(System.Web.HttpRuntime).GetProperty("FileChangesMonitor", indingFlags.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[] { });

有没有办法解决这个问题而不将文件夹位置移到app文件夹之外?

2 个答案:

答案 0 :(得分:2)

如果您修改bin子文件夹中的任何内容,应用程序将被回收,这将导致InProc会话丢失。

如果您创建/删除bin以外的文件夹,我不希望应用程序被回收,但您可以通过向Application_End添加trace语句来轻松检查。如果触发此事件,您的应用程序将被回收。

修改bin目录后的应用程序回收是设计使然,我不会通过反映私有ASP.NET方法来干扰它。

您可以尝试使用out-proc SessionState模式(StateServer或SQLServer)

答案 1 :(得分:1)

也许你可以将你的会话放在数据库中,这样可以使它保持活力。

“为ASP.NET SQL Server会话状态配置SQL Server”http://support.microsoft.com/kb/317604

编辑:对于Windows Azure,我会选择Windows Azure Cache。请参阅:http://msdn.microsoft.com/en-us/library/windowsazure/gg185668.aspxhttps://www.simple-talk.com/cloud/platform-as-a-service/managing-session-state-in-windows-azure-what-are-the-options/我认为不会因回收应用程序而受到影响。

或者对于更通用的解决方案,使用Microsoft ASP.NET Universal Providers可以使用:http://www.nuget.org/packages/Microsoft.AspNet.Providers