2009-04-24 7 views
0

Je vois un problème très étrange sur une de mes boîtes de production. Nous avons une application hébergée dans IIS 6 sur une seule machine avec un serveur web apache devant elle. Mon application utilise l'adhésion ASP.NET pour l'authentification et repose sur l'état de la session. Je vois un problème en ce moment où certaines demandes de serveur rencontreront une exception nulle en essayant d'accéder aux variables de session, mais si la requête est réessayée, la page ne rencontre aucune exception et se comporte correctement.Perdre une session ASP.NET pour une requête et la récupérer ensuite

Je crois que cela a quelque chose à voir avec le cookie de session ID soit corrompu ou perdu sur la demande, mais je n'ai aucune idée de ce qui pourrait causer cela. La raison pour laquelle je crois que c'est parce qu'il semble que ASP.NET ne voit pas le cookie et créer une nouvelle session, ce qui expliquerait pourquoi les variables sont nulles. Lorsqu'il reçoit l'exception, il ne peut pas écrire le nouveau cookie SessionID sur le client, de sorte que le client conserve l'ID Session d'origine. Ensuite, lorsque la demande suivante est envoyée, le cookie SessionID d'origine est utilisé, ce que maintenant ASP.NET trouve et est capable de récupérer l'état de la session. C'est de la pure spéculation, mais elle semble correspondre aux symptômes.

Ce site n'utilise pas non plus d'autres cookies que ceux requis par l'adhésion à ASP.NET et la session ASP.NET, donc je suis bien en dessous de la limite de cookies pour IE. Le site fonctionne correctement depuis environ 8 mois et ce problème est apparu récemment. J'ai essayé les réinitialisations d'IIS et ai réellement relancé la machine, mais rien n'a semblé aider le problème.

Mises à jour:

Voici quelques clarifications qui ont été demandées. 1.12) Notre serveur Apache est la seule chose exposée à Internet. Toutes les demandes se produisent via HTTPS à cette boîte. La boîte Apache transmet ensuite toute requête passée via HTTP à notre serveur d'applications. Ceci est fait pour des raisons de sécurité. Nous avons cherché à savoir si Apache pouvait être le problème, mais il ne semble pas y avoir d'erreur dans les journaux Apache. 2.) L'exception nulle se produit lorsque vous tentez d'accéder à un objet stocké dans une session que l'application s'attend à y trouver, par opposition à l'exception se produisant avec l'objet session lui-même.

+0

Vous transférez des demandes d'une boîte Apache vers une boîte IIS pour des raisons de "sécurité"? Je ne pense pas que les gars de votre réseau savent ce qu'ils font. – NotMe

+0

Nous avons une zone DMZ qui est fondamentalement une autre couche en face de nos applications afin qu'elles ne soient pas exposées au réseau. Il permet également la réécriture d'URL que vous ne pouvez vraiment pas faire avec une pile technologique .NET, sauf si vous passez à IIS7. – Broc

+0

Pouvez-vous clarifier votre configuration? Je n'ai aucune idée de ce que vous entendez par IIS 6 "avec un serveur web apache en face d'elle." Qu'est-ce qui gère réellement les requêtes HTTP sur le Web? En outre, est l'exception null sur l'objet Session réel, ou simplement que les objets que vous attendez dans la session ne sont pas là? Une de ces choses ... eh bien, ne devrait jamais arriver! Même si le cookie d'identifiant de session est perdu, ASP.NET doit créer un nouvel objet Session valide. – Bryan

Répondre

0

Nous avons trouvé la racine du problème. Il semble que la méta-base IIS ait été corrompue sur notre serveur d'applications. La meilleure façon de résoudre ce problème est de faire une installation propre d'IIS, mais en raison des contraintes métier, ce n'est pas une option pour nous. Une autre solution consiste à créer un nouveau pool d'applications pour que l'application s'exécute. Selon certaines personnes ayant plus d'expertise IIS que moi-même, cela résoudra le problème à court terme, mais il est très probable que la même chose arrivera à ce Pool d'applications. Nous devons donc créer de nouveaux Pools d'applications si cela se reproduit.

Questions connexes