Was ist die beste Vorgehensweise zum Starten des Wartungsprozesses auf ASP.NET [geschlossen]

StackOverflow https://stackoverflow.com/questions/45841

  •  09-06-2019
  •  | 
  •  

Frage

Bei einer ASP.NET-Anwendung muss ich regelmäßig (täglich, stündlich usw.) einen Wartungsprozess ausführen.

Was ist der beste Weg, dies zu erreichen, ohne auf einen externen Prozess wie eine geplante Aufgabe auf dem Server angewiesen zu sein (vorausgesetzt, ich habe keinen Zugriff auf die Server-Shared-Hosting-Umgebung)?

War es hilfreich?

Lösung

So macht StackOverflow es:

private static CacheItemRemovedCallback OnCacheRemove = null;

protected void Application_Start(object sender, EventArgs e)
{
    AddTask("DoStuff", 60);
}

private void AddTask(string name, int seconds)
{
    OnCacheRemove = new CacheItemRemovedCallback(CacheItemRemoved);
    HttpRuntime.Cache.Insert(name, seconds, null,
        DateTime.Now.AddSeconds(seconds), Cache.NoSlidingExpiration,
        CacheItemPriority.NotRemovable, OnCacheRemove);
}

public void CacheItemRemoved(string k, object v, CacheItemRemovedReason r)
{
    // do stuff here if it matches our taskname, like WebRequest
    // re-add our task so it recurs
    AddTask(k, Convert.ToInt32(v));
}

Einzelheiten: http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

Andere Tipps

Eine Möglichkeit, dies zu tun, wenn Sie es nicht zu einem geplanten Zeitpunkt tun müssen, sondern nur „ab und zu“ aufräumen müssen, besteht darin, in Ihrem Global.asax Session_OnEnd() eine Funktion zu erstellen, die eine zufällige Funktion erstellt Eine Zahl zwischen 1 und 100, und wenn die Zahl beispielsweise 50 ist, führen Sie die Wartungsaufgabe aus.

Natürlich können Sie die „100“ reduzieren, damit die Aufgabe häufiger ausgeführt wird.

Außerdem gibt es einen Artikel mit dem Titel „Simulieren Sie einen Windows-Dienst mithilfe von ASP.NET, um geplante Jobs auszuführen“ unter http://www.codeproject.com/aspnet/ASPNETService.asp das einen ablaufenden Cache verwendet, um einen Timer zu simulieren.Es wird behauptet, dass es auf jeder gehosteten Site ausgeführt werden kann.

Wenn Sie die letzte Methode verwenden, lesen Sie bitte diesen Kommentar aus einem Beitrag zu dieser Technik:

Sie müssen wirklich vorsichtig auf die Länge der ausgeführten Aufgabe sein.Jede neue Aufgabe ist ein neuer Arbeiter -Thread, und es gibt eine begrenzte Anzahl davon - da er einen Thread aus dem verwalteten Threadpool „leiht“.

Ab V3.5 des Frameworks wurde die maximale Anzahl von Fäden von 25 auf 250 erhöht.Aber jetzt gibt es ein logarithmisches Startup. Wenn es also mehr Fäden herausgeht, wird es mit ihnen stechender.Wenn Ihnen die verfügbaren Threads im verwalteten Thread -Pool ausgehen, werden Ihre Antwortzeiten durch das Dach gehen.

Was Sie hier wirklich schreiben, ist ein Messaging-/Warteschlangensystem.

Wenn Sie Dinge wie das Aktualisieren des Cache tun, starten Sie auf jeden Fall eine neue Aufgabe.Wenn Sie so etwas wie das Herunterladen einer sekundären HTTP -Ressource oder einer intensiven Datenbank -Arbeit machen, schreiben Sie einen Windows -Dienst und verwenden Sie eine Warteschlange, mit der Sie mehr Kontrolle darüber haben können, wie viel Sie jedes Mal „beißen“.

Während die Cache-Lösung in einfachen Fällen funktioniert, haben Sie kein Glück, wenn sich Ihre Planungsanforderungen ändern.Stattdessen könnten Sie verwenden Quarz.NET, eine Portierung des beliebten Java-Frameworks Quarz, was sehr flexibel ist.

Obwohl die Art und Weise, wie StackOverflow dies tut, definitiv einzigartig ist, möchten Sie dies vielleicht überwachen Frage auch, da es sich darauf bezieht.

Dies ist ein externer Prozess und ich weiß nicht, wie zuverlässig er ist, aber Sie könnten etwas Ähnliches auf einem Computer einrichten, von dem Sie wissen, dass er immer eingeschaltet ist www.webcron.org.

Im Grunde geht es darum, eine von Ihnen angeforderte Seite nach dem von Ihnen gewünschten Zeitplan aufzurufen.

Sie können im Grunde genommen in regelmäßigen Abständen alles auf eine Seite bringen, was Ihre Wartungsaufgabe in Gang setzt.

Jeff und Joel haben kürzlich in einem Podcast auch darüber gesprochen, ähnliche Dinge mit anderen Methoden zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top