Стратегия опроса для приложения ASP.Net? - PullRequest
0 голосов
/ 02 апреля 2009

У меня есть приложение ASP.Net, которое требует выполнения какой-либо работы на другом компьютере. Для этого я оставляю сообщение в очереди видимым для обеих машин. Когда работа завершена, сообщение остается во второй очереди.

Мне нужно, чтобы приложение ASP.Net периодически проверяло вторую очередь, чтобы увидеть, завершена ли какая-либо из задач.

Где лучшее место, кроме такой петли? Global.asax?

Я помню, как читал где-то, что вы можете получить функцию, вызванную после некоторого интервала. Это будет подходящим?

Ответы [ 2 ]

1 голос
/ 03 апреля 2009

Для выполнения периодических задач на asp.net я нашел два приемлемых подхода:

  1. Создать поток во время Application_Start в global.asax, в цикле while (1) Выполнить работу (2) Спить поток на некотором интервале.
  2. Снова в Application_Start вставьте фиктивный элемент в кэш asp.net, истекает через определенный интервал и передайте этому элементу кэша обратный вызов, который будет вызван по истечении срока действия. В этом обратном вызове вы можете выполнить работу и вставить элемент кэша обратно таким же образом.

В обоих случаях вам необходимо убедиться, что ваш поток продолжает работать, даже если произошла ошибка. Вы можете поместить код восстановления в SessionStart и BeginRequest, чтобы проверить, есть ли ваш поток или элемент кэша, и обновить его, если с ним что-то случилось.

1 голос
/ 02 апреля 2009

Я предполагаю, что это делается на регулярной основе, и что какой-то другой процесс помещает элементы в очередь?

Если это так, вы можете поместить что-то в Global.asax, чтобы при запуске приложения создавался отдельный поток, который просто следит за очередью, вы можете использовать таймер, чтобы этот поток спал в течение X секунд, а затем проверьте результаты.

...