ASP.NET uruchamia się ponownie po utworzeniu, zmianie nazwy lub usunięciu folderu

UPDATE -- process to replicate issue:

1) Stwórz projekt strony w c:\projects\restart-demo

2) Dodaj domyślną stronę www.config i atrapa strony aspx test.aspx

3) Map IIS, aby wskazać folder główny c:\projects\restart-demo

4) aplikacja Monitor uruchamia się ponownie za pomocą perfmon, monitorowanie zdrowia, śledzenie w globalnym.ASAX Application_End, itp.

5) strona żądania w przeglądarce http://localhost/test.aspx

start aplikacji

6) Utwórz nowy folder c:\projects\restart-demo\asdf

koniec aplikacji

7) strona żądania w przeglądarce http://localhost/test.aspx

start aplikacji

8) Zmień nazwę folderu c:\projects\restart-demo\asdf do c:\projects\restart-demo\asdf1

koniec aplikacji

End update

Używamy back-end CMS do generowania plików i folderów w ASP.NET miejscu.

Użytkownicy mogą tworzyć/modyfikować / usuwać pliki i wysyłać je do farmy internetowej.

Jeden problem, który zauważyliśmy:

Gdy użytkownik tworzy, zmienia nazwę lub usuwa folder , powoduje to, że aplikacja Domena do ponownego uruchomienia. W konsekwencji, sesji, pamięci podręcznej itp. wszyscy się zgubili.

Uwaga nie musi to być specjalny folder, taki jak / bin lub / App_Code ani jedno, ani drugie.

Czy jest jakiś sposób, aby zapobiec temu zachowaniu?

To naprawdę hamuje wydajność z dwóch powodów:

    Pamięć podręczna jest wyrzucana po ponownym uruchomieniu domeny aplikacji]} Po ponownym uruchomieniu aplikacji domena musi zostać ponownie zbudowana]}
Author: frankadelic, 2010-02-12

5 answers

Ten kod wydaje się rozwiązywać problem po dodaniu do Application_Start() w trybie globalnym.asax:

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[] { }); 

Http://dotnetslackers.com/Community/blogs/haissam/archive/2008/11/12/disable-session-expiration-when-using-directory-delete.aspx

Dzięki tym zmianom mogę tworzyć/modyfikować / usuwać foldery bez powodowania ponownego uruchamiania aplikacji.

Nie wiadomo, czy jest to najlepsze rozwiązanie -- nie wiadomo, czy wystąpią niepożądane skutki uboczne wywołania StopMonitoring.

 15
Author: frankadelic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-12 17:25:35

Być może trochę późno, ale przechowywanie i obsługa plików tymczasowych w innym folderze poza wwwroot aplikacji również rozwiązuje problem.

 9
Author: Pleun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-28 16:04:54

Domyślnie an asp.net aplikacja uruchomi się ponownie Co 15th raz plik zmienia się w jego wirtualnym katalogu, to jest przeważać częściowe rekompilacje i ich waga pamięci vs ogólnej wydajności...możesz zmienić to zachowanie, ale zużycie pamięci może wzrosnąć, a wydajność z czasem spadnie.

Aby to zrobić, ustaw atrybut numRecompilesBeforeAppRestart na elemencie kompilacji , w Twojej sieci.config miałby taki element en:

<configuration>
  <system.web>
    <compilation numRecompilesBeforeAppRestart="15">

Wartość domyślna to 15, możesz zmienić go na cokolwiek chcesz, przeczytaj link, aby uzyskać więcej informacji. Jednak jest to z jakiegoś powodu, nie zaleca się umieszczania dynamicznej zawartości w wirtualnym katalogu aplikacji, najlepiej mieć ją obok lub gdzieś indziej.

 2
Author: Nick Craver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-12 00:42:19

Dodanie "fcnMode="Disabled" do ustawień <httpRuntime> w web.config wyłącza recykling AppDomain, gdy zawartość folderu głównego zostanie zmieniona.

 2
Author: Bill Wade,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-16 17:38:54

Enable ASP.NET monitorowanie stanu i zajrzyj do dziennika zdarzeń, aby zobaczyć, dlaczego AppDomain ponownie się uruchomił.


Założę się, że to dlatego, że użyłeś projektu strony internetowej, zamiast projektu aplikacji internetowej. Spróbuj odtworzyć to za pomocą projektu aplikacji internetowej.

Czy masz uruchomione oprogramowanie antywirusowe lub indeksujące? Takie oprogramowanie informuje, gdy foldery są tworzone i / lub modyfikowane.

 0
Author: John Saunders,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-12 01:08:09