asp.Netフォルダの削除によるセッションの失効解決方法

3133 ワード

ソリューション
 
幸いなことに、Reflection and HttpModulesのソリューションがあります.まず像を作成します.csファイル... 
 
  
using System.Reflection; 
using System.Web; 
namespace MyWebsite 

/// <summary> 
/// Stops the ASP.NET AppDomain being restarted (which clears 
/// Session state, Cache etc.) whenever a folder is deleted. 
/// </summary> 
public class StopAppDomainRestartOnFolderDeleteModule : IHttpModule 

public void Init(HttpApplication context) 

PropertyInfo p = typeof(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[] { }); 

public void Dispose() { } 



Application_StartはGlobalを使用する.asaxファイルでInit()コードに配置されているApplication_スタート中です.Globalにいると信じています.Asaxの使用方法は古く、HttpModulesを使用してネットワーク(アプリケーションライフサイクルのセッション開始、セッション終了時)に応答できます.InitメソッドはGlobal.asaxとApplication_Startの役割は同じで、DiposeはApplication_に似ています.End. 
上記のコードで機能するには、webが必要です.configファイルセクションに挿入:
type="MyWebsite.StopAppDomainRestartOnFolderDeleteModule"/> 
なお、「stopAppDomainRestartOnFolderDelete」はカスタムの任意の名称である、「MyWebsite」は上記である.csファイルのネーミングスペースは、一般的にプロジェクト名です.「S t o p A p D o m a m i n RestartOnFolderDeleteModule」は上記である.csファイルのクラス名. 
これがそれです.これにより、フォルダ削除AppDomainの再起動が防止され、Webが変更されます.configとbinフォルダは、まだ再起動されます.これは私たちが望んでいることです. 
しかし、いくつかのファイルを削除するとsessionが期限切れになるのはなぜですか?まだ分からない...そこでネットで検索すると次のような方法があります
sessionの保存方法をstateserverに設定すればよい
stateConnectionString="tcpip=127.0.0.1:42424"/>