¿Cuál es la mejor práctica para iniciar el proceso de mantenimiento en ASP.NET? [cerrado]

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

  •  09-06-2019
  •  | 
  •  

Pregunta

Dada una aplicación ASP.NET, necesito ejecutar un proceso de mantenimiento de forma regular (diariamente, cada hora, etc.).

¿Cuál es la mejor manera de lograr esto sin depender de un proceso externo como una tarea programada en el servidor (supongamos que no tengo acceso al servidor - entorno de alojamiento compartido)?

¿Fue útil?

Solución

Así es como lo hace StackOverflow:

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

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

Otros consejos

Una forma de hacerlo, si no necesita hacerlo en un horario programado, sino que sólo necesita limpiar "de vez en cuando", es crear una función en su Global.asax Session_OnEnd() que creará un número entre 1 y 100, y si el número es, digamos, 50, ejecuta la tarea de mantenimiento.

Por supuesto, puede reducir el "100" para que la tarea se realice con más frecuencia.

También hay un artículo titulado 'Simular un servicio de Windows usando ASP.NET para ejecutar trabajos programados' en http://www.codeproject.com/aspnet/ASPNETService.asp que utiliza un caché que expira para simular un temporizador.Afirma que se puede ejecutar en cualquier sitio alojado.

Si está utilizando el último, lea este comentario de una publicación sobre esta técnica:

Debes tener cuidado realmente con la longitud de la tarea en ejecución.Cada nueva tarea es un nuevo hilo de trabajadores y hay un número limitado de ellos, ya que "toma" un hilo del grupo de hilos administrados.

A partir de v3.5 del marco, el número máximo de hilos aumentó 10x de 25 a 250.Pero ahora hay una startup logarítmica para ellos, por lo que, a medida que dura más hilos, se vuelve más fuerte con ellos.Si se queda sin hilos disponibles en el grupo de hilos administrados, sus tiempos de respuesta van a pasar por el techo.

Lo que realmente estás escribiendo aquí es un sistema de mensajería/cola.

Si está haciendo cosas como actualizar el caché, entonces, por supuesto, inicie una nueva tarea.Si está haciendo algo como descargar un recurso HTTP secundario o algún tipo de trabajo de base de datos intensivo, escriba un servicio de Windows y use una cola que le permita un mayor control sobre cuánto "muerde" cada vez.

Si bien la solución de caché funciona para casos simples, si alguna vez necesita cambiar su programación, no tendrá suerte.En su lugar, podrías usar Cuarzo.NET, una adaptación del popular framework java Cuarzo, que es muy flexible.

Si bien la forma en que StackOverflow hace esto es definitivamente única, es posible que desees monitorear esto pregunta también, ya que se relaciona.

Este es un proceso externo y no sé qué tan confiable es, pero puedes configurar algo similar en una máquina que sabes que siempre está encendida. www.webcron.org.

Básicamente, lo que hace es acceder a una página que usted solicita en el horario que solicita.

Básicamente, podría hacer que cualquier cosa llegue a una página en un horario regular que iniciaría su tarea de mantenimiento.

Jeff y Joel también hablaron sobre cómo hacer cosas similares en un podcast reciente a través de otros métodos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top