Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 16308|Antwort: 0

[ASP.NET] [Mythos] Wird die Methode HttpApplication-Objekt-Init nur einmal ausgeführt?

[Link kopieren]
Veröffentlicht am 06.02.2017 17:29:28 | | | |
Ich habe festgestellt, dass viele Freunde, wie ich, versehentlich IHttpModule.Init als Application_Start Alternative genutzt haben, um einige Anwendungsinitialisierungsoperationen darin durchzuführen.
Die Natur der Application_Start Ereignisse in IHttpModule.Init und Global.asax ist jedoch unterschiedlich, und IHttpModule.Init kann nicht direkt verwendet werden, um Application_Start ASP.NET den Initialisierungsprozess der Anwendung zu ersetzen. Sie kann auch nicht einfach verwendet werden, um zu schließen, dass die Init-Methode wiederholt aufgerufen wird, um zu schließen, dass ASP.NET Programm neu gestartet wurde.
Der Grund dafür ist, dass IHttpModule.Init mehrfach aufgerufen werden kann, wenn man auf eine Anfrage ASP.NET antwortet, und es ist sehr wahrscheinlich, dass es während des eigentlichen Website-Betriebs passiert.
Warum wird IHttpModule.Init mehrfach aufgerufen? Weil jede HttpApplication-Instanz jeweils nur eine Anfrage verarbeiten kann und ASP.NET eine bestimmte Anzahl gleichzeitiger Anfragen unterstützt, sodass die HttpApplication-Instanz mehrfach erstellt wird, um auf verschiedene Anfragen zu reagieren, wenn sie nicht ausreicht, um gleichzeitige Anfragen zu beantworten. Jede HttpApplication-Instanz erstellt einen neuen Satz von HttpModules und ruft die Init-Methode nach der Erstellung auf.
Application_Start wird erst aufgerufen, nachdem das erste HttpApplication-Objekt erstellt wurde, und nachfolgende HttpApplication-Instanzen lösen dieses Ereignis nicht aus.
Ich denke, die Wiederverwendung von HttpApplication-Instanzen ist ein Hauptgrund für das Missverständnis der Verwendung der Init-Methode von IHttpModule, weil wir beim Debuggen eines Programms meist nur eine Anfrage haben und es praktisch unmöglich ist, die Init-Methode von HttpModule wiederholt auszuführen. In der eigentlichen Website-Betriebsumgebung sind gleichzeitige Anfragen häufig, und wenn die Init-Methode missbraucht wird, kann das seltsame Probleme in der tatsächlichen Umgebung verursachen.
Für spezifische Details siehe bitte MSDNs "Overview of the ASP.NET Application Lifecycle for IIS 5.0 and 6.0", das Bilder im Artikel enthält:
Sie können auch Refelector verwenden, um die System.Web-Assembler zu dekompilieren und die Aufrufbeziehung der IHttpModule.Init-Methode zu analysieren.
Am Ende erhältst du die Methode System.Web.HttpApplicationFactory.GetNormalApplicationInstance, die zeigt, wie Instanzen von HttpApplication wiederverwendet und erstellt werden.
Zusammenfassend lässt sich sagen, dass IHttpModule.Init nicht einfach als Ersatz für Application_Start verwendet werden kann.
Eine relativ einfache Methode besteht darin, ein statisches Bool-Typfeld als Initialisierungstag zu verwenden und die Marke nach der vom Programm in HttpModule geforderten Initialisierung auf true zu setzen und die Initialisierung beim nächsten Mal nicht zu wiederholen.
Code wie die Registrierung des BeginRequest-Ereignisses muss jedoch jedes Mal ausgeführt werden, wenn Init ausgeführt wird, da die HttpModule-Instanz zu diesem Zeitpunkt eine andere ist; wenn man das Feld der statischen Initialisierung ohne Wiederholung des Registrierungsereignisses bewertet, führt das zu seltsamen Problemen wie URL-Umschreibungen, die manchmal ausgeführt und manchmal nicht ausgeführt werden.

[Mythos] Wird die Methode HttpApplication-Objekt-Init nur einmal ausgeführt?

Antwort: Es wird mehrfach durchgeführt!!!!





Vorhergehend:Verwenden Sie InternalsVisibleTo, um "friend assembly" zur Montage hinzuzufügen
Nächster:Java-Regex-Wettbewerb, um eine schöne Zahl auszuwählen
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com