Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 16308|Antwoord: 0

[ASP.NET] [Mythe] Wordt de HttpApplication-object Init-methode slechts één keer uitgevoerd?

[Link kopiëren]
Geplaatst op 06-02-2017 17:29:28 | | | |
Ik ontdekte dat veel vrienden, net als ik, per ongeluk IHttpModule.Init gebruikten als een Application_Start alternatief om enkele initialisatiebesturingen van applicaties erin uit te voeren.
De aard van Application_Start gebeurtenissen in IHttpModule.Init en Global.asax is echter verschillend, en IHttpModule.Init kan niet direct worden gebruikt om Application_Start ASP.NET het initialisatieproces van de applicatie te vervangen. Ook kan het niet simpelweg worden gebruikt om te concluderen dat de Init-methode herhaaldelijk wordt aangeroepen om te concluderen dat ASP.NET programma opnieuw is gestart.
De reden is dat IHttpModule.Init meerdere keren kan worden aangeroepen bij het beantwoorden van een verzoek ASP.NET, en het is zeer waarschijnlijk dat dit gebeurt tijdens de daadwerkelijke website-operatie.
Waarom wordt IHttpModule.Init meerdere keren aangeroepen? Omdat elke HttpApplication-instantie maar één verzoek tegelijk kan verwerken, en ASP.NET een bepaald aantal gelijktijdige verzoeken ondersteunt, dus de HttpApplication-instantie wordt meerdere keren aangemaakt om op verschillende verzoeken te reageren wanneer het niet genoeg is om op gelijktijdige verzoeken te reageren. Elke HttpApplication-instantie maakt een nieuwe set HttpModules aan en roept de Init-methode aan nadat deze is aangemaakt.
Application_Start wordt pas aangeroepen nadat het eerste HttpApplication-object is aangemaakt, en latere HttpApplication-instanties zullen dit evenement niet activeren.
Ik denk dat het hergebruik van HttpApplication-instanties een belangrijke reden is voor het misverstand over het gebruik van de Init-methode van IHttpModule, omdat we meestal maar één verzoek hebben bij het debuggen van een programma, en het praktisch onmogelijk is om de Init-methode van HttpModule herhaaldelijk uit te voeren. In de daadwerkelijke website-omgeving zijn gelijktijdige verzoeken gebruikelijk, en als de Init-methode verkeerd wordt gebruikt, kan dit vreemde problemen veroorzaken in de omgeving.
Voor specifieke details, raadpleeg MSDN's "Overzicht van de ASP.NET Application Lifecycle voor IIS 5.0 en 6.0", dat afbeeldingen in het artikel bevat:
Je kunt Refelector ook gebruiken om de System.Web-assembly te decompileren en de aanroeprelatie van de IHttpModule.Init-methode te analyseren.
Je krijgt de methode System.Web.HttpApplicationFactory.GetNormalApplicationInstance, die laat zien hoe instanties van HttpApplication worden hergebruikt en aangemaakt.
Samenvattend kan IHttpModule.Init niet simpelweg worden gebruikt als vervanging voor Application_Start.
Een relatief eenvoudige manier is om een statisch bool-type veld als initialisatietag te gebruiken, de markering op waar te zetten na de initialisatie die het programma in HttpModule vereist, en de initialisatie de volgende keer niet te herhalen.
Code zoals het registreren van het BeginRequest-event moet echter nog steeds elke keer worden uitgevoerd wanneer Init wordt uitgevoerd, omdat de HttpModule-instantie op dat moment anders is; als je het statische initialisatie-markupveld beoordeelt zonder het registratie-event te herhalen, leidt dat tot vreemde problemen zoals het herschrijven van URL's, soms uitgevoerd en soms niet.

[Mythe] Wordt de HttpApplication-object Init-methode slechts één keer uitgevoerd?

Antwoord: Het zal meerdere keren worden uitgevoerd!!!!





Vorig:Gebruik InternalsVisibleTo om "friend assembly" toe te voegen aan assembly
Volgend:Java regex-wedstrijd om een mooi nummer te kiezen
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com