2009-06-06 3 views
21

Birisi, uygulama başlatıldıktan sonra birkaç kez HttpApplication'dan türetilen özel bir sınıfın yapıcısının neden çağrıldığını açıklayabilir mi?Neden HttpApplication kurucusu birkaç kez çağrıldı

Kodum yapıdır aşağıdadır:
- Global.asax içinde My Küresel sınıf den CustomApp sınıf türetir.
- CustomApp sınıf Küresel sınıf başlangıçta oluşturulan

HttpApplication sınıfından türetilmiş, ancak yapıcı bir kesme noktası yerleştirdiğinizde, birkaç kez çağrılır! Uygulaması sınıfının yalnızca bir örneğinin oluşturulması gerektiğini düşündüm.

Yanlış mıyım?

UPD: web sunucusu gerçekten aynı anda gelen birden çok istek işlemenin birden HttpApplication örnekler de oluşturabilirsiniz. Bu, özellikle HttpApplication soyundan gelen kurucunun içine bir kesme noktası koyduğunuzda ortaya çıkar. İstemciden (http içerik, CSS dosyaları, vb.) Birkaç talep beklemekte ve bunların her birine hizmet vermek için web sunucusu yeni HttpApp örnekleri oluşturacaktır. Bu yüzden, uygulama başlatma mantığını yazarken buna dikkat edin.

+0

Bu davranışı gösteren bir aşağı kod kod pasajı göndermek mümkün mü? –

cevap

15

ASP.NET çalışma zamanının, uygulama alanı başına birden çok HttpApplication oluşturabileceğine inanıyorum. Yani HttpApplication.Init ve Ctor bir kereden fazla çağrılabilir.

Yalnızca bir kez çalışan başlatma koduna sahip olmak istiyorsanız, yalnızca uygulama başına bir kez çağrılacak Application_Start olayını kullanmalısınız.

+0

HttpApplication sınıfımın web sitesinin dışında olması gerektiğinden Applcation_Start için bağlanabileceğim bir etkinlik (veya benzeri) var mı? –

+1

Sadece Global.asax.cs dosyasında 'Applcation_Start' yöntemini uygulayın ve otomatik olarak bağlanacak ve başlangıç ​​saatinde çağrılacaktır. http://msdn.microsoft.com/en-us/library/ms178473.aspx – mckamey

+0

Ancak, Application_Start uygulamasında olay işleyicilerini kaydettiğinizde, "AuthenticateRequest" veya "AcquireRequestState" gibi olayların tetiklenmediğini unutmayın () '. Bunları 'HttpApplication' için bir geçersiz kılma olan' Init() 'e kaydetmek isteyebilirsiniz. – Manfred

6

Lütfen bir gönderiye bakın global.asax in ASP.NET - neden HttpApplication'ın birden çok örneğinin olduğunu açıklıyor. Temelde iki havuz vardır: özel ve normal. Normal havuz istekleri tarafından kullanılan HttpApplication örneklerini içerir (her istek kendi HttpApplication örneğine sahiptir). Özel havuz, uygulama düzeyinde etkinlikler için kullanılan HttpApplication nesneleri içerir (Application_Start, Application_Error gibi).

+0

çok ilginç, teşekkürler! – Andy