2017-01-23 3 views
0

Ich erstelle eine ASP.NET Web API mit .NET 4.5.2. Die API muss beim Start eine Verbindung zu einem Runspace herstellen. Ich habe Fragen darüber, wann diese Startup.Configuration-Methode tatsächlich ausgeführt wird. Es scheint nicht zu laufen, wenn ich die Website oder den App-Pool starte. Es scheint zu warten, bis zum ersten Mal jemand versucht, auf die Website zuzugreifen. Ist das richtig? Auch scheint es zu zufälligen Zeiten wieder zu laufen. Ich habe es nach 2 Stunden, 4 Stunden und 16 Stunden gesehen. Es ergibt keinen Sinn. Kann mir jemand aufklären, wann diese Methoden laufen sollen? Außerdem, wenn Sie einen Vorschlag für einen besseren Ort haben, um sie zu setzen, da ich möchte, dass es ein freigegebener Runspace für alle Verbindungen ist und ich möchte, dass es ausgeführt wird, bevor irgendjemand versucht, sich mit der API zu verbinden. Vielleicht ein separater Service?ASP.NET Web API Startfragen

Würde es sich auch lohnen, in ASP.NET CORE zu suchen? Ich brauche es nicht für etwas anderes als IIS, aber wenn es einen Vorteil für die Verwendung von CORE gibt, bin ich an einem Punkt, wo es leicht zu wechseln ist.

public partial class Startup 
{ 
    public Cache GlobalCache; 
    public static PowershellRunspace PSRunspace; 
    public static ActiveDirectory ADObjects = new ActiveDirectory(); 
    public void Configuration(IAppBuilder app) 
    { 
     ConfigureAuth(app); 
     GlobalCache = new Cache(); 
     AppLog log = new AppLog(); 

     log.InfoLog("Starting PowerShell Runspace in Hangfire...", true); 

     GlobalConfiguration.Configuration.UseSqlServerStorage("Hangfire"); 
     BackgroundJob.Enqueue(() => log.InfoLog("Hangfire started!", true)); 
     BackgroundJob.Enqueue(() => ADObjects.Startup(true)); 
     BackgroundJob.Enqueue(() => StaticRunspace.Start()); 

     app.UseHangfireDashboard(); 
     app.UseHangfireServer(); 

    } 
} 

Antwort

1

Sie laufen diese Anwendung in IIS (und nicht selbst Hosting) Unter der Annahme, gelten die folgenden Regeln:

  1. Die Configuration Methode wird einmal pro Anwendung zu starten.
  2. Die Anwendung wird träge gestartet (auf die erste Anfrage über HTTP/S).
  3. IIS hat ein paar Einstellungen, die die Anwendung betreffen:
    1. Ein Idle Timeout. Wenn die App nicht innerhalb von 20 Minuten über eine Anfrage aufgerufen wird, wird die Anwendung entladen/offline gestellt. Die nächste Anfrage startet es erneut.
    2. Ein regulärer App Pool Recycling. Es startet gerade die Anwendung neu, indem es den App-Pool alle 1740 Minuten recycelt.

So ist das Verhalten Sie sehen wahrscheinlich aufgrund des seltenen Zugangs der Anmeldung mit dem IIS Standardwert kombiniert. Wenn Sie die Einstellungen sehen oder konfigurieren möchten, können Sie dies tun, indem Sie IIS aufrufen, mit der rechten Maustaste auf Ihren App-Pool klicken und Erweiterte Einstellungen auswählen.

+0

Danke, das erklärt alles, was ich gesehen habe. –