Was ist der Unterschied zwischen dem Ereignis webrole onStart () und dem Ereignis Application_Start () global.asax?

8

Ich fange gerade an, meine Füße nass zu bekommen, indem ich die technischen Details von Azure lerne, also entschuldige mich, wenn das eine dumme Frage ist.

Wenn ich ein Cloud-Service-Projekt in Visual Studio erstelle und eine Webrole für eine mvc-Anwendung hinzufüge, kann ich in der mvc-Anwendung die Datei "WebRole.cs" sehen. Wenn ich jedoch mit einer MVC-Anwendung als Ausgangspunkt anfange und diese später für Azure aktivieren möchte, indem ich mit der rechten Maustaste auf das Projekt klicke und "Windows Azure Cloud Service-Projekt hinzufügen" auswähle, wird keine WebRole.cs erstellt.

>

Also, wo würde ich hingehen, um beim Start-Event der WebRole etwas zu bewegen? Das Ereignis Application_Start () der Datei Global.asax?

Wenn ja, was ist der Unterschied zwischen Application_Start () in Global.asax und der onStart () - Methode einer Webrole?

Ich habe den folgenden Beitrag gefunden, der eine teilweise Erklärung bietet: Was startet zuerst Application_Start oder WebRole OnStart?

Wenn also das onStart-Ereignis der WebRole vor dem Application_Start () in Global.asax auftritt, was passiert, wenn ich Code für das Ereignis onStart () in einem Projekt ausführen möchte, das ich später aktiviert habe? die App für Azure?

    
Steviebob 21.05.2013, 21:44
quelle

3 Antworten

13

Wenn es keine Klasse gibt, die RoleEntryPoint erweitert, wird die Webrolle problemlos funktionieren , stattdessen wird kein zusätzlicher Code ausgeführt von OnStart() , Run() und OnStop() .

Application_Start() steht in keiner Beziehung zu Azure und wird von der Azure-Laufzeitumgebung vollständig ignoriert. Es handelt sich lediglich um einen Teil der ASP.NET-Verkabelung. Sie können leicht Application_Start() bedingungslos eine Ausnahme auslösen, und das verhindert nicht, dass Ihre Web-Rolle gestartet wird, nur alle HTTP-Anfragen werden fehlschlagen.

Beachten Sie, dass ab SDK 1.3 der Standardmodus "IIS-Modus" lautet, in dem die Webrollen-Payload mit RoleEntryPoint descendant in einem Prozess (WaIISHost.exe) ausgeführt wird und ASP.NET-Code in einem anderen Prozess ausgeführt wird. Der Prozess mit RoleEntryPoint wird zuerst von der Azure-Laufzeit gestartet, dann wird OnStart() ausgeführt und die Endlosschleife wird in Run() eingefügt. Anschließend wird die Instanz für HTTP-Anforderungen geöffnet. Wenn Sie IIS 7.5 verwenden und "Autostart" aktiviert haben, können Sie Application_Start() früher ausführen, ansonsten wird Application_Start() erst ausgeführt, wenn die erste Anfrage kommt.

Der Schlüssel ist also, dass es zwei verschiedene Prozesse gibt, auf denen Ihr Code läuft und jeder eine eigene Lebensdauer hat und Einschränkungen bei der Gestaltung Ihrer Anwendung vorschreibt.

Die Nachkommenklasse RoleEntryPoint kann einen beliebigen Namen haben, zu einem beliebigen Namespace gehören und sich in einer beliebigen .cs-Datei innerhalb des Projekts befinden, das als Nutzlast für die Webrolle ausgewählt wurde. Dies ist wahrscheinlich Ihr ASP.NET-Projekt. Unter diesen Bedingungen wird der RoleEntryPoint -Abkömmling von der Azure-Laufzeitumgebung gefunden und seine Methoden werden als Teil der Lebensdauer der Rolleninstanz ausgeführt.

    
sharptooth 22.05.2013, 09:00
quelle
0

Ich mag die Frage hier falsch verstehen, also lassen Sie es mich bitte wissen.

Sie können sicherlich mit einem regulären ASP.NET-Projekt beginnen und es später zur Ausführung in einer Windows Azure-Webrolle konvertieren. Die WebRole.cs ist technisch nicht erforderlich - die Rolle sollte ohne sie starten. Wenn Sie jedoch eine Logik als Teil des Startprozesses der Rolleninstanz einfügen möchten, können Sie eine WebRole-Klasse hinzufügen, die von RoleEntryPoint erbt und OnStart () überschreibt. Dort können Sie beispielsweise Diagnosefunktionen konfigurieren, Windows Azure-Speichertabellen oder -Warteschlangen erstellen usw.

Im Allgemeinen würde ich Konfigurations- / Bootstrap-Logik in die OnStart () - plattformspezifische config / bootstrap der Webrolle einfügen.

    
mcollier 21.05.2013 22:20
quelle
0

Sie können eine einzelne Einstiegspunktklasse für Ihre Rolle haben, die von der RoleEntryPoint-Klasse geerbt wird. Normalerweise werden workerrole.cs oder webrole.cs davon geerbt.

Sie können einen beliebigen Klassennamen angeben, sofern er von RoleEntryPoint geerbt wird.

OnStart-Ereignis dieser Klasse wird ausgelöst, wenn Ihre Rolle bereit ist. Sie können Ihre Initialisierungslogik hier eingeben, bevor Ihre Anwendung gestartet wird. Es könnte die Initialisierung von IoC-Containern, Windows Azure-Diagnosekonfiguration oder irgendetwas sein.

Application_Start-Ereignis wird ausgelöst, wenn Sie Ihre Website zum ersten Mal aufrufen. Deine Rolle ist bereits bereit.

    
bhavesh lad 22.05.2013 08:40
quelle