2009-01-17 9 views
7

Dans ASP.NET 3.5 (avec IIS6), AppDomains sont créés pour chaque requête? Je sais que toutes les applications ont leur propre AppDomain sous w3wp.exe, mais comment fonctionne exactement AppDomain? Je discutais aujourd'hui avec un collègue qui essayait de me convaincre que si une application ASP.NET a un objet statique (ou une classe Singleton), cet objet sera partagé entre toutes les demandes. Je pense que c'est faux. Ai-je raison? Comment puis-je convaincre mon collègue?AppDomains sont créés pour chaque demande?

Merci!

Répondre

9

Je suis désolé de dire que votre collègue a raison. Dans une application ASP.NET, chaque application configurée en tant que telle dans IIS s'exécute dans son propre AppDomain, qui est la portée d'un objet singleton. Ainsi, un singleton dans App1 est disponible pour toutes les demandes à App1 (et pourrait devenir une concurrence s'il n'est pas géré avec soin), mais les demandes dans App2 ne seraient pas en mesure d'accéder au singleton dans App1.

Threading and Pooling in the HTTP Pipeline http://i.msdn.microsoft.com/cc164128.fig01(en-us).gif

Ce diagramme de MSDN Magazine permet de montrer comment chaque application est isolée dans son propre AppDomain. Alors que le diagramme montre un processus de travail IIS5 (aspnet_wp.exe), un processus de travail IIS6 serait similaire pour les applications configurées pour s'exécuter dans le même pool d'applications.

1

Un singleton existera dans toute la portée de l'appdomain. De plus, toutes les demandes adressées à votre application iront au même domaine d'application, de sorte que votre collègue est correct.

Mise à jour: La question suscitée par la curiosité et j'ai trouvé un "singleton" que vous pouvez utiliser sur un per-request basis. Je ne le recommande pas vraiment. Si quelqu'un a besoin d'un singleton par requête, il doit trouver un motif plus approprié.

+0

Avez-vous des documents d'idées auxquels je pourrais me référer? Merci! – Martin

Questions connexes