Pergunta

Qual é a melhor aplicação para mais de um serviço de fundo em uma aplicação ASP.NET?

  1. Temporizador Callback

    Timer timer = new Timer(new TimerCallback(MyWorkCallback), HttpContext, 5000, 5000);
    
  2. Tópico ou ThreadPool

    Thread thread = new Thread(Work);
    thread.IsBackground = true;
    thread.Start();
    
  3. BackgroundWorker

    BackgroundWorker worker = new BackgroundWorker(); 
    worker.DoWork += new DoWorkEventHandler(DoMyWork);
    worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(DoMyWork_Completed); 
    worker.RunWorkerAsync();
    
  4. Caching como http://www.codeproject.com/KB/ aspnet / ASPNETService.aspx (localizado no pós href="http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/"> )

Eu preciso executar vários "serviços" fundo em um determinado momento. Um serviço pode ser executado a cada 5 minutos, onde outro pode ser uma vez por dia. Nunca será de mais de 10 serviços em execução ao mesmo tempo.

Foi útil?

Solução

Bem, ao invés de uma 'rosca simples', você iria para um ThreadPool.

E se fosse comigo, eu iria executá-lo em um serviço do Windows e comunicar a ele através de MSMQ.

Outras dicas

Você deve implementar alguns estados de tarefas. Após a aplicação recicla serviço de fundo deve reparar tarefas quebrados. Se as tarefas estão sob operações então não haverá problemas com esse comportamento.

Nenhuma das sugestões das escalas poster original para mais de um servidor.

Eu quero a mesma coisa: A robusta e simples de usar maneira de agendar tarefas regulares de fundo e executar o processamento pesado ad-hoc (reconstruir caches e assim por diante) sem afetar os usuários atuais solicitar.

Eu quero ter as tarefas são executadas em aplicações web contexto, a) obter a configuração de web.config (evitará a duplicação de configuração) e b) ser implantado com o aplicativo web (implantação facilidade). e eu preciso dele para trabalhar para sites se espalhou para mais de um servidor.

Eu só encontrei uma abordagens que fornece um pouco o que eu quero:

(1) Criar uma página .aspx para cada tarefa e configurar uma tarefa programada wget em um servidor separado que chama este aspx no site. Eu implementaram esta abordagem e ele funciona, mas eu não gosto 100%, por causa da dependência tarefa agendada e ele não me dá a capacidade de executar tarefas pesadas ad hoc no fundo

scroll top