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

C# 创建和删除文件夹时MVC会话丢失,c#,asp.net,.net,asp.net-mvc,session,C#,Asp.net,.net,Asp.net Mvc,Session,我正在运行一个MVC4 asp.net应用程序,它处理应用程序文件夹中的创建/删除文件夹 应用程序创建或删除文件夹时,会话将保留 但当应用程序创建一个文件夹然后逐个删除时,会话丢失 我已将此代码段放在Global.asax中,以解决即使应用程序中的物理文件夹发生更改也要维护会话的问题: PropertyInfo p = typeof(System.Web.HttpRuntime).GetProperty("FileChangesMonitor", indingFlags.NonPublic |

我正在运行一个MVC4 asp.net应用程序,它处理应用程序文件夹中的创建/删除文件夹

应用程序创建或删除文件夹时,会话将保留

但当应用程序创建一个文件夹然后逐个删除时,会话丢失

我已将此代码段放在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[] { });

有没有办法在不将文件夹位置移到应用程序文件夹外的情况下修复此问题?

也许您可以将会话放入数据库中,这样可以使其保持活动状态

“为ASP.NET SQL Server会话状态配置SQL Server”

编辑:对于WindowsAzure,我会选择WindowsAzure缓存。参考:我相信这不会受到回收应用程序的影响


或者对于更通用的解决方案,使用Microsoft ASP.NET Universal Providers可能会起作用:

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

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

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


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

系统可能部署在Azure环境中,在Azure中将SQLServer用作sesstionState模式时存在缺点,其中一个缺点是Microsoft不支持使用SQL Azure数据库对ASP.net应用程序进行SQL会话状态管理。在.net 4.5.1中有一项更改会中断您的文件监视。因此,无论何时添加或删除文件夹,应用程序池都将重新启动。因此,您的会话已结束。只是一点背景知识。