Стратегия опроса для приложения ASP.Net?
Вопрос
У меня есть приложение ASP.Net, для которого необходимо выполнить некоторую работу на другом компьютере.Для этого я оставляю сообщение в очереди, видимое для обеих машин.Когда работа завершена, сообщение остается во второй очереди.
Мне нужно, чтобы приложение ASP.Net периодически проверяло вторую очередь, чтобы увидеть, выполнены ли какие-либо задачи.
Где лучше всего сделать такую петлю?Global.asax?
Я помню, как где-то читал, что функцию можно вызвать после интервала.Это подойдет?
Решение
Для выполнения периодических задач на asp.net я нашел два приемлемых подхода:
- Создайте поток во время Application_Start в global.asax в цикле while (1) Выполните работу (2) Приостановите поток на некоторое время.
- Снова в Application_Start вставьте фиктивный элемент в кеш asp.net, срок действия которого истекает через определенный интервал, и дайте этому элементу кеша обратный вызов, который будет вызываться по истечении срока его действия.В этом обратном вызове вы можете выполнить всю работу и вставить элемент кэша обратно таким же образом.
В обоих случаях вам необходимо убедиться, что ваш поток продолжает работать, даже если происходит ошибка.Вы можете поместить код восстановления в SessionStart и BeginRequest, чтобы проверить наличие вашего потока или элемента кэша, и обновить его, если с ним что-то случилось.
Другие советы
Я предполагаю, что это делается регулярно и что какой-то другой процесс помещает элементы в очередь?
Если это так, вы можете поместить в Global.asax что-то, что при запуске приложения создает отдельный поток, который просто отслеживает очередь, вы можете использовать таймер, чтобы этот поток находился в режиме сна в течение X секунд, а затем проверять результаты.