2009-01-17 18 views
7

ASP.NET 3.5'de (IIS6 ile), her istek için AppDomains oluşturuldu mu? Tüm uygulamaların w3wp.exe altında kendi AppDomain'leri olduğunu biliyorum, ancak tüm AppDomain tam olarak nasıl çalışıyor?AppDomains her istek için oluşturuldu mu?

Bugün bir ASP.NET uygulamasının statik bir nesnesine (veya Singleton sınıfına) sahip olması durumunda, bu nesnenin tüm istekler arasında paylaşılacağını bana inandırmaya çalışan bir meslektaşıyla tartışıyordum. Bence bu yanlış. Ben haklı mıyım Meslektaşımı nasıl ikna ederim?

Teşekkürler!

cevap

9

Meslektaşınızın doğru olduğunu söylediğim için üzgünüm. Bir ASP.NET uygulamasında, IIS'de olduğu gibi yapılandırılan her bir uygulama, bir tekil nesnesinin kapsamı olan kendi Uygulama Etki Alanı içinde çalışır. Bu nedenle, App1'deki bir tekil tüm App1 istekleri için kullanılabilir (ve dikkatle ele alınmadığı takdirde bir eşzamanlılık haline gelebilir), ancak App2'deki istekler, App1'deki singleton'a erişemez.

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

MSDN Dergisi'nden Bu diyagram her uygulama kendi AppDomain içinde izole nasıl göstermemize yardımcı olur. Diyagram bir IIS5 çalışan işlemi (aspnet_wp.exe) gösterirken, aynı Uygulama Havuzu'nda çalışacak şekilde yapılandırılmış bir IIS6 çalışan işlemi benzerdir.

1

Uygulama alanının tümünde bir singleton bulunacaktır. Ayrıca, uygulamanızın tüm istekleri aynı uygulama alanına gider, dolayısıyla meslektaşınız doğrudur.

Güncelleme: Merakla ortaya çıkan soru ve ben bir per-request basis üzerinde kullanabileceğiniz bir "singleton" buldum. Aslında bunu önermiyorum. Birisi istek başına bir singletona ihtiyaç duyarsa, daha uygun bir model bulmaları gerekir.

+0

Başvuruda bulunabileceğim herhangi bir belgeye ilişkin bir fikriniz var mı? Teşekkürler! – Martin

İlgili konular