Я хочу создать веб-службу, размещенную в Windows Azure. Клиенты будут загружать файлы для обработки, облако обработает эти файлы, создаст результирующие файлы, клиент их загрузит.
Думаю, я буду использовать веб-роли для обработки HTTP-запросов и рабочие роли для фактической обработки и что-то вроде Azure Queue или Azure Table Storage для отслеживания запросов. Предположим, что это будет хранилище таблиц Azure — одна запись «запрос» на каждый загруженный пользователем файл.
Основная проблема проектирования заключается в том, что обработка одного файла может занять от одной секунды до, скажем, десяти часов.
Итак, я ожидаю следующий случай: рабочая роль запускается, попадает в Azure Table Storage, находит запрос с пометкой «готов к обработке», помечает его как «обрабатывается», начинает фактическую обработку. Обычно он обрабатывает файл и помечает запрос как «обработанный», но что, если он неожиданно завершает работу?
Если я не позабочусь об этом, запрос навсегда останется в состоянии «обрабатывается».
Как отслеживать запросы с пометкой «в обработке», но отклоненные? Какой механизм в Windows Azure был бы наиболее удобен для этого?