Длительная операция. Какой тип приложения выбрать...
От: Byter  
Дата: 06.07.07 10:07
Оценка:
Здравствуйте.

Есть некое веб-приложение, написанное на .NET 1.1. А точнее это не одно, а целый комплекс связанных друг с другом веб-приложений, веб-сервисов и т.д. Так вот, есть стандартная задачка — выгрузка данных из БД в промежуточный формат (в моем случае XML). Изначально я реализовал данную функциональность в виде веб-сервиса. В его задачу входило просто формирование XML-файла (а точнее папки с файлами, но не буду загромождать деталями). Причем, чтобы не заставлять клиента ожидать, из контекста веб-сервиса запускался отдельный поток (или потоки) который непосредственно "формировал" файл. Но я нарвался на серьезную проблему. Процесс выгрузки может занимать значительное время (более 2-3 часов за милую душу). При стандартной настройке же IIS поток убивается если он находиться в режиме ожидания больше 20 минут. Вызов ХП из веб-сервиса как раз и считается "ожиданием" ну или простоем, не помню как правильно назвать, но идея должна быть ясна. Итак, я понял, что веб-сервисы просто по своей природе не предназначены для выполнения длительных операций. Итого, я решил сделать из текущего веб-сервиса просто координатор запросов. Т.е. вычленить всю эту долговыполнимую логику в отдельную сущность, а веб-сервис ее просто будет вызывать (веб-сервис по сути "фасад" полного функционала).

Итого, вопрос:
Какой тип приложения выбрать в качестве вот такой теневой лошадки, которую будет вызывать веб-сервис?

Необходимо учесть:
— не должно быть необходимости в доп. настройке чего-либо (того же IIS, к примеру). Вся настройка должна быть в инстольнике.
— была возможность выполнять длительные операции без намека на ограничение времени выполнения!

Сейчас я склоняюсь в сторону вин-сервиса. Меня смущает пока только (я плохо в них разбираюсь):
— много одновременных запросов. Как себя ведет вин-сервис при поступлении 2х одновременных запросов?
— так и не понял пока как комфортно цеплять методы вин-сервиса. Есть кошмарное предположение, что вин-сервис ОЧЕНЬ не похож на веб-сервис в смысле вывешивания интерфейса )). Итого встает проблема передачи параметров необходимых для выгрузки.

Реализация в виде DLL:
— сомневаюсь, что уйду от проблемы ограничения времени выполнения. Наверняка ведь код будет выполняться в контексте IIS-процесса и будет "подпадать" под все ограничения.

Или плюнуть на все и реализовать в виде какого-нибудь windowless console/form application. Но тут:
— без понятия, уйду ли я от ограничений по времени.
— будет ли это эффективно при сравнительно большом к-ве одновременных вызовов (20-30).

P.S. Рассматриваю так же вариант вин-сервиса, который будет просматривать некую табличку в БД в поисках задач выгрузки на выполнение. Если бы еще можно что-то типа оповещателя повесить, чтобы не сервис опрашивал по таймеру БД, а она при вставке новой строки в таблицу задач дергнул .NET-код. Типа триггер "after insert" вызывает event каким-то образом...

Вот такая вот кучка вопросов )). Буду очень признателен любым советам/комментариям
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.