2013-06-16 1 views
0

asp.net에서 디렉토리를 삭제하면 응용 프로그램이 다시 시작되고 모든 세션이 손실되고 캐시가 지워집니다. 그래서 다음 해결책을 찾았습니다. 나는 Application_StartGlobal.asax에 다음 코드를 입력하여 응용 프로그램 풀 재활용을 비활성화하지만 사용하지 않는 경우가 있습니다. 왜? 당신 수 없습니다디렉터리를 삭제 한 후 응용 프로그램을 다시 시작하지 않도록 설정하는 방법 ASP.NET 4에서?

System.Reflection.PropertyInfo p = typeof(HttpRuntime).GetProperty("FileChangesMonitor", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static); 
     object o = p.GetValue(null, null); 
     System.Reflection.FieldInfo f = o.GetType().GetField("_dirMonSubdirs", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.IgnoreCase); 
     object monitor = f.GetValue(o); 
     System.Reflection.MethodInfo m = monitor.GetType().GetMethod("StopMonitoring", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); 
     m.Invoke(monitor, new object[] { }); 
+2

응용 프로그램 풀이 재활용 될 수있는 여러 가지 이유가 있으며 그 중 일부는 비활성화 할 수 없습니다. 올바른 해결책은 실제로 응용 프로그램을 사용하지 않도록 설정하는 대신 재활용하는 것이 좋습니다. –

+0

올바른 해결책은 응용 프로그램 루트 아래의 디렉토리를 삭제하는 것이 아닙니다. –

+0

이 코드는 종종 올바르게 작동합니다. – shiva

답변

1

는 응용 프로그램 풀 재활용을 방지하고, 이렇게하면 어쨌든 일을 달성하기 위해 잘못된 방법입니다.

대신 응용 프로그램 디렉터리 내의 파일이나 디렉터리를 삭제하면 안됩니다. 임시 데이터의 경우 temp 디렉토리를 사용해야하며 영구 데이터의 경우 별도의 위치에 저장해야합니다.

또한 응용 프로그램 풀 재활용 후에도 세션과 캐시가 유지되도록 신경 쓰면 추가로 영구 데이터 저장소에 저장하고 다시로드해야합니다.