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.
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
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
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