Qu'est-ce qui peut faire en sorte qu'un processus de travail ASP.NET soit recyclé?

StackOverflow https://stackoverflow.com/questions/94042

  •  01-07-2019
  •  | 
  •  

Question

Voici ma question actuelle:

J'imagine que mon problème (décrit ci-dessous) est dû au recyclage des processus de travail ASP.NET, comme indiqué dans les réponses ci-dessous. J'utilise le stockage de sessions InProc et je ne vois pas beaucoup de chances de s'en éloigner. , en raison de la restriction imposée aux autres types de stockage, que tous les objets de session soient sérialisables. Cependant, je ne peux pas comprendre ce qui ferait en sorte que le processus de travail soit recyclé aussi souvent que je le vois. Il n'y a pas eu de changement des fichiers dans le répertoire de l'application pour autant que je sache, et les options dans IIS semble impliquer que le processus ne serait recyclé que toutes les 1 740 minutes, ce qui est beaucoup moins fréquent que la perte de session réelle. Ma question est donc la suivante: quels cas différents peuvent entraîner le recyclage d’un processus de travail ASP.NET?

Voici ma question initiale:

Je rencontre un problème difficile à reproduire dans mon application Web ASP.NET. L'application comporte une page principale .aspx qui est chargée et initialise un certain nombre de variables de session. Cette page utilise la classe ASP.NET Ajax Sys.Net.WebRequest pour accéder de manière répétée à une autre page .aspx, qui utilise les variables de session pour effectuer des requêtes de base de données et mettre à jour la page principale (la page principale n'est jamais redéfinie). (demandé).

Parfois, après une période d'utilisation de la page entraînant le succès des requêtes HTTP lorsque la session créée dans la page principale est correctement transférée vers la sous-page, l'une des requêtes semble provoquer la création d'une nouvelle session ASP.NET & # 8212; toutes les variables de session sont perdues (ce qui provoque une exception dans mon code) et un nouvel identifiant de session est signalé dans la page demandée dynamiquement. Cela signifie que, tout à coup, la page principale est déconnectée du serveur. En ce qui concerne le serveur, l'utilisateur n'est plus connecté.

Je suis presque sûr que ce n'est pas un délai d'expiration de session. Le délai d'expiration est défini sur une valeur ridicule. Le temps nécessaire pour que cela se produise est variable, mais n'est jamais assez long pour que la session expire. , et la constante Sys.Net.WebRequests doit actualiser le temporisateur de session.

Alors, que pourrait-il se passer d'autre pour que les demandes HTTP perdent le contact avec la session ASP.NET? Malheureusement, je n'ai pas détecté de trafic réseau quand cela m'est arrivé, ou j'aurais vérifié si le cookie de session ASP.NET était bloqué ou non.

Était-ce utile?

La solution

Une solution serait d'utiliser un StateServer plutôt que la gestion de session InProc.

De nombreux problèmes peuvent entraîner la perte de l'état de la session:

  1. Modification de Web.Config
  2. réinitialisation IIS
  3. etc.

Si l'état de la session est important pour votre application, utilisez soit la gestion d'état SQL, soit le serveur d'état fourni avec ASP. NET.

A bientôt,

RB.

Autres conseils

Nous avons eu des problèmes de session lorsque nous avons migré l'application AnkerEx vers le nouveau serveur. Le nouveau serveur avait Microsoft Windows Server 2008 comme système d'exploitation et Microsoft Internet Information Services 7. Également installés sur le serveur .NET Framework des versions 1.0.3705, 1.1.4322, 2.0.50727, 3.0 et 3.5. Pour résoudre ce problème, j’ai réalisé la surveillance de la santé pour événements liés à la vie de l'application dans ASP.NET 2.0. J'avais ajouté au web.config:

...
...
<system.web>
...
...
    <healthMonitoring>
      <rules>
        <add name="Application Events"
            eventName="Application Lifetime Events"
            provider="EventLogProvider"
            profile="Default"
            minInterval="00:01:00" />
      </rules>
    </healthMonitoring>
...
...

C’est une aide pour nous de vérifier que l’AppDomain est recyclé. Nous pouvons le voir sur notre Observateur d'événements. Le lien vers plus de détails est http: //blogs.msdn. com / rahulso / archive / 2006/04/13 / 575715.aspx

Après avoir ajouté des éléments à web.config, l'observateur d'événements m'a montré que mon l'application redémarre chaque fois que je clique sur presque n'importe quel lien dans mon application. Extrait de l'article de http://blogs.msdn.com/ toddca / archive / 2005/12/01 / 499144.aspx i découvert que ASP.NET a le nouveau comportement - si nous allons supprimer, par exemple un sous-répertoire du répertoire racine de l’application, alors ASP.NET 2.0 fera le redémarrer AppDomain.

Le problème était que j'avais dans le web.config l'instruction:

...
<compilation debug="true" tempDirectory="c:\AnkerEx\Temporary ASP.NET files">
...

I.e. ASP.NET a compilé des pages aspx dans le dossier de la racine de mon application. Je pense qu'il a créé des dossiers, peut-être et en a aussi retiré certains. j'ai enlevé L’instruction tempDirectory et l’application ont commencé à fonctionner de manière stable.

Le processus de travail est probablement cyclique. http://www.lattimore.id.au/2006 / 06/03 / sessions de largage /

Cela pourrait être dû à une exception non gérée dans un fil d’arrière-plan. Cela peut entraîner la fin de votre processus de travail ASP.NET. Un nouveau processus est démarré très rapidement, vous ne le remarquez donc pas, mais toutes vos sessions sont perdues.

Voici un article qui explique cela beaucoup mieux que moi: Exception non gérée ASP.NET 2.0 Problèmes

citation:

  

Une exception non gérée dans une application ASP.NET 2.0 en cours d'exécution met généralement fin au processus W3WP.exe et vous laisse avec une entrée très cryptée dans EventLog, qui ressemble à ceci:

     

"EventType clr20r3, P1 w3wp.exe, P2 6.0.3790.1830, P3 42435be1, P4 app_web_ncsnb2-n, P5 0.0.0.0, P6 440a4082, P7 5, P8 1, P9 system.nullreference, N10. "

Voici un article de la base de connaissances Microsoft qui explique le même problème: KB911816 Des exceptions non gérées causent une cause ASP.NET- arrêter inopinément les applications basées sur .NET Framework 2.0

Je suppose que la consommation de mémoire est importante, mais configurez-la IIS pour consigner le journal recycle et vous saurez à coup sûr.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top