Как периодически вызывать фоновый процесс в ASP.NET? - PullRequest
2 голосов
/ 24 января 2012

У меня есть фоновый процесс / функция, которую я хочу выполнять каждые 2 минуты в моем приложении. Он проверяет наличие каких-либо событий для этого текущего времени в базе данных и отображает список событий, если таковые имеются.

Для этого я нашел два следующих подхода:

  1. Использование фонового процесса в ASP.NET. (Но я не знаю, как его называть каждые 2 минуты.)

  2. Попытка поиска решения с использованием Службы Windows, которая вызывает мой WebService . (Но не смог найти никакой помощи в этом тоже.)

Поэтому, пожалуйста, предоставьте мне лучшее решение моей проблемы.

Ответы [ 7 ]

1 голос
/ 04 января 2013

Здесь мы также можем использовать другой подход.

1) Создайте приложение службы Windows ASP.Net.Вы должны указать URL вашего WebService, который должен вызываться из вашего приложения ASP.Net в этой службе Windows (скорее всего, в App.Config службы Windows).

2) Добавить «Web Reference»вашей веб-службы в службе Windows.

3) В этой службе Windows создан метод, который будет иметь метод, который будет вызываться через определенный промежуток времени (скажем, каждые 2 минуты)

3) Теперь, когда этот метод службы Windows вызывается после истечения таймера, он вызывает методы веб-службы в приложении ASP.NET,

4) Создайте настройку этой службы Windows и установите там, где требуется.

0 голосов
/ 24 января 2012

Вы можете сделать простую службу Windows, которая вызывает некоторую страницу или лучший обработчик ashx в вашем приложении ASP.NET.Создайте службу Windows и в ней вызовите обработчик ashx.Примерно так:

  public partial class Service1 : ServiceBase
  {
    private Timer serviceTimer = new Timer();

    public Service1()
    {
      InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
      this.serviceTimer.Interval = (1000 * 60) * 2;  // TWO minutes
      this.serviceTimer.Elapsed += new ElapsedEventHandler(DoWork);
      this.serviceTimer.Start();
    }

    protected override void OnStop()
    {
      this.serviceTimer.Stop();
    }

    void DoWork(object sender, ElapsedEventArgs e)
    {
      WebClient wc = new WebClient();
      wc.DownloadData("http://www.yoursite.com/checkevents.ashx");
    }

  }

Или вы можете использовать хак с истечением срока действия кэша, вы можете увидеть полный пример и код здесь: http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

0 голосов
/ 24 января 2012

Вы можете использовать таймер, объявленный в global.asax, например:

    void Application_Start(object sender, EventArgs e)
    {
        System.Timers.Timer timer = new System.Timers.Timer();
        timer.Interval = 2000 * 60;
        timer.Elapsed += Myhandler;
        timer.Start();

        Application.Add("timer", timer);
    }

    static void Myhandler(object sender, System.Timers.ElapsedEventArgs e)
    {
    }
0 голосов
/ 24 января 2012

Кварцевый планировщик - лучшее решение. Это дает вам хорошее количество вариантов.

0 голосов
/ 24 января 2012

Вы можете использовать таймер для вызова фонового потока после определенного интервала времени.

Threading будет как:

protected void BackGroundJob() 
{ 
    //Your code goes here
} 

protected void Timer1_Tick(object sender, EventArgs e) 
{ 
    Thread t = new Thread(new ThreadStart(BackGroundJob)); 
    t.Start(); 
} 

При каждом переключении таймера он будет вызывать фоновый процесс. Настройте таймер соответственно.

0 голосов
/ 24 января 2012

Для этого можно использовать класс BackgroundWorker. Попробуйте создать экземпляр в Application_Start и утилизируйте его при событии Application_End.

Для получения дополнительной информации посмотрите на это

http://www.codeproject.com/Articles/34968/Use-NET-s-BackgroundWorker-to-Keep-ASP-NET-Cache-i

0 голосов
/ 24 января 2012

Вам необходимо создать новый поток с этим процессом / функцией. функция должна быть примерно такой:

public void myfunctionloop()
{
   while(true)
   {
     //do your stuff
     wait 2 mins
   }
}

таким образом, вы будете иметь поток, выполняющий ваш метод каждые 2 минуты, пока ваше приложение работает, как всегда, в основном потоке.

взгляните на эти сети:

http://msdn.microsoft.com/en-us/magazine/cc164128.aspx http://www.codeproject.com/Articles/38501/Multi-Threading-in-ASP-NET

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...