Quelle est la meilleure pratique pour lancer le processus de maintenance sur ASP.NET [fermé]

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

  •  09-06-2019
  •  | 
  •  

Question

Étant donné une application ASP.NET, je dois exécuter un processus de maintenance de manière régulière (quotidiennement, horaire, etc.).

Quelle est la meilleure façon d'y parvenir sans compter sur un processus externe comme une tâche planifiée sur le serveur (en supposant que je n'ai pas accès au serveur - environnement d'hébergement partagé).

Était-ce utile?

La solution

Voici comment StackOverflow procède :

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));
}

Détails: http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

Autres conseils

Une façon de le faire, si vous n'avez pas besoin de le faire à une heure programmée, mais que vous avez juste besoin de nettoyer "de temps en temps", est de créer une fonction dans votre Global.asax Session_OnEnd() qui créera un résultat aléatoire. nombre compris entre 1 et 100, et si le nombre est, par exemple, 50, vous exécutez la tâche de maintenance.

Bien sûr, vous pouvez réduire le « 100 » pour que la tâche soit effectuée plus fréquemment.

Il existe également un article intitulé « Simuler un service Windows à l'aide d'ASP.NET pour exécuter des tâches planifiées » sur http://www.codeproject.com/aspnet/ASPNETService.asp qui utilise un cache expirant pour simuler une minuterie.Il prétend qu'il peut être exécuté sur n'importe quel site hébergé.

Si vous utilisez la dernière, veuillez lire ce commentaire d'un article sur cette technique :

Vous devez vraiment être prudent sur la longueur de la tâche en cours d'exécution.Chaque nouvelle tâche est un nouveau fil de travail et il y en a un nombre limité - car il «emprunte» un fil du pool de threads géré.

À partir de la v3,5 du cadre, le nombre maximum de threads a augmenté de 10x de 25 à 250.Mais il y a maintenant une startup logarithmique pour eux, donc pour distribuer plus de fils, il devient plus avare avec eux.Si vous manquez de fils disponibles dans la piscine de threads gérée - vos temps de réponse vont passer par le toit.

Ce que vous écrivez vraiment ici est un système de messagerie / file d'attente.

Si vous faites des choses comme la mise à jour du cache, alors par tous les moyens - lancez une nouvelle tâche.Si vous faites quelque chose comme le téléchargement d'une ressource HTTP secondaire ou une sorte de travail de base de données intensif - écrivez un service Windows et utilisez une file d'attente qui vous permet de contrôler plus de la quantité de «mordre» à chaque fois.

Bien que la solution Cache fonctionne pour des cas simples, si vos besoins de planification changent, vous n'aurez pas de chance.Au lieu de cela, vous pourriez utiliser Quartz.NET, un portage du framework Java populaire Quartz, ce qui est très flexible.

Bien que la façon dont StackOverflow effectue cela soit définitivement unique, vous souhaiterez peut-être surveiller cela question aussi, puisque cela se rapporte.

il s'agit d'un processus externe et je ne sais pas à quel point il est fiable, mais vous pouvez configurer quelque chose de similaire sur une machine dont vous savez qu'elle est toujours allumée www.webcron.org.

Fondamentalement, ce qu'il fait, c'est accéder à une page à laquelle vous le demandez selon le calendrier que vous demandez.

Essentiellement, vous pourriez avoir n'importe quoi sur une page selon un calendrier régulier qui lancerait votre tâche de maintenance.

Jeff et Joel ont également discuté de faire des choses similaires dans un podcast récent via d'autres méthodes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top