2009-01-17 15 views
7

In ASP.NET 3.5 (mit IIS6) werden AppDomains für jede Anforderung erstellt? Ich weiß, dass alle Anwendungen ihre eigene AppDomain unter w3wp.exe haben, aber wie genau funktioniert die ganze AppDomain?Werden AppDomains für jede Anfrage erstellt?

Ich argumentierte heute mit einem Kollegen, der versuchte, mich davon zu überzeugen, dass, wenn eine ASP.NET-Anwendung ein statisches Objekt (oder Singleton-Klasse) hat, dieses Objekt unter allen Anfragen geteilt wird. Ich denke, das ist falsch. Habe ich recht? Wie überzeuge ich meinen Kollegen?

Danke!

Antwort

9

Es tut mir leid zu sagen, dass Ihr Kollege korrekt ist. In einer ASP.NET-Anwendung wird jede in IIS als solche konfigurierte Anwendung in ihrer eigenen AppDomain ausgeführt, die den Bereich eines Singleton-Objekts darstellt. Ein Singleton in App1 ist daher für alle Anforderungen an App1 verfügbar (und könnte zu einem Nebenläufigkeitsschlüssel werden, wenn nicht sorgfältig behandelt wird), aber Anforderungen in App2 können nicht auf den Singleton in App1 zugreifen.

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

Dieses Diagramm von MSDN Magazine hilft zeigen, wie jede Anwendung in einem eigenen AppDomain isoliert ist. Während das Diagramm einen IIS5-Arbeitsprozess (aspnet_wp.exe) zeigt, ist ein IIS6-Arbeitsprozess für Anwendungen ähnlich, die für die Ausführung im gleichen Anwendungspool konfiguriert sind.

1

Ein Singleton wird im gesamten Umfang der App-Domäne existieren. Außerdem werden alle Anfragen an Ihre Anwendung an dieselbe Appdomain gesendet, sodass Ihr Kollege tatsächlich korrekt ist.

Update: Die Frage spornte Neugier und ich fand einen "Singleton", den Sie auf einer per-request basis verwenden können. Ich empfehle das allerdings nicht. Wenn jemand ein Singleton pro Anfrage benötigt, muss er ein passenderes Muster finden.

+0

Haben Sie Unterlagen, auf die ich verweisen könnte? Vielen Dank! – Martin

Verwandte Themen