Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 16308|Răspunde: 0

[ASP.NET] [Mit] Va fi executată metoda Init a obiectului HttpApplication o singură dată?

[Copiază linkul]
Postat pe 06.02.2017 17:29:28 | | | |
Am descoperit că mulți prieteni, ca mine, au folosit din greșeală IHttpModule.Init ca o alternativă Application_Start pentru a face unele operații de inițializare a aplicațiilor în acesta.
Totuși, natura evenimentelor Application_Start în IHttpModule.Init și Global.asax este diferită, iar IHttpModule.Init nu poate fi folosit direct pentru a înlocui Application_Start ASP.NET procesul de inițializare al aplicației. Nici nu poate fi folosit pur și simplu pentru a concluziona că metoda Init este chemată în mod repetat pentru a concluziona că programul ASP.NET a fost repornit.
Motivul este că IHttpModule.Init poate fi apelat de mai multe ori când răspunzi la o solicitare ASP.NET și este foarte probabil să se întâmple în timpul operării propriu-zise a site-ului.
De ce este apelat IHttpModule.Init de mai multe ori, deoarece fiecare instanță HttpApplication poate gestiona doar o singură cerere la un moment dat, iar ASP.NET suportă un anumit număr de cereri concurente, astfel încât instanța HttpApplication va fi creată de mai multe ori pentru a răspunde la cereri diferite atunci când nu este suficient să răspundă la cereri concurente. Fiecare instanță HttpApplication creează un nou set de HttpModules și apelează metoda Init după ce a fost creată.
Application_Start vor fi apelate doar după ce primul obiect HttpApplication este creat, iar instanțele HttpApplication ulterioare nu vor declanșa acest eveniment.
Cred că reutilizarea instanțelor HttpApplication este un motiv major pentru neînțelegerea utilizării metodei Init a IHttpModule, deoarece de obicei avem o singură cerere când depanăm un program și este practic imposibil să execuți în mod repetat metoda Init a lui HttpModule. În mediul real de rulare al site-ului, cererile concurente sunt frecvente, iar dacă metoda Init este folosită greșit, poate apărea probleme ciudate în mediul real.
Pentru detalii specifice, vă rugăm să consultați "Prezentare generală a ciclului de viață al aplicațiilor ASP.NET pentru IIS 5.0 și 6.0", care oferă imagini în articol:
Poți folosi și Refelector pentru a decompila asamblarea System.Web și a analiza relația de apel a metodei IHttpModule.Init.
Vei ajunge la metoda System.Web.HttpApplicationFactory.GetNormalApplicationInstance, care arată cum sunt reutilizate și create instanțele de HttpApplication.
În concluzie, IHttpModule.Init nu poate fi folosit pur și simplu ca înlocuitor pentru Application_Start.
O metodă relativ simplă este să folosești un câmp static de tip bool ca etichetă de inițializare și să setezi marcajele pe true după inițializarea cerută de program în HttpModule, fără a mai repeta inițializarea data viitoare.
Totuși, codul precum înregistrarea evenimentului BeginRequest trebuie executat de fiecare dată când Init este executat, deoarece instanța HttpModule în acest moment este diferită; dacă judeci câmpul static de marcaj de inițializare fără a repeta evenimentul de înregistrare, va duce la probleme ciudate, cum ar fi rescrierea URL-urilor uneori executată, alteori neexecutată.

[Mit] Va fi executată metoda Init a obiectului HttpApplication o singură dată?

Răspuns: Va fi executat de mai multe ori!!!!





Precedent:Folosește InternalsVisibleTo pentru a adăuga "asamblarea prietenului" în asamblare
Următor:Concurs Java regex pentru a selecta un număr frumos
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com