Лучший подход к запуску Thread / Process под IIS / WCF на виртуальном хостинге - PullRequest
1 голос
/ 23 марта 2009

Сценарий. Служба WCF получает XDocument от клиентов, обрабатывает его и вставляет строку в таблицу MS SQL.

Несколько клиентов могут одновременно вызывать службу WCF. Звонок обычно не занимает много времени (несколько секунд).

Теперь мне нужно что-то , чтобы опросить таблицу SQL и запустить другой набор процессов в асинхронном режиме. 2-й процесс не должен ничего вызывать и никак не связан с WCF. Нужно просто прочитать таблицу и выполнить ряд методов и, возможно, вызов веб-службы (если, конечно, есть записи), но это все. Клиенты службы WCF, использующие вышеупомянутую услугу, понятия не имеют об этом и не заботятся об этом.

Я прочитал о этом вопросе в StackOverflow , и я также знаю, что служба Windows была бы идеальной, но эта служба WCF будет размещена на общем хостинге (discountasp или аналогичном) и, следовательно, при установке Служба Windows не будет вариант (насколько я знаю).

Учитывая, что архитектура является фиксированной (И.Е .: я не могу изменить таблицу, она исходит из устаревшего формата или изменить механизм службы WCF), что бы вы предложили опрашивать / обрабатывать эту таблицу?

Я бы сказал, что мне нужно проверять каждые 10 минут или около того. Это не должно быть мгновенным.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 23 марта 2009

Чит. Представьте этот процесс как другую службу WCF и запустите команду go из коробки, находящейся под вашим контролем, в назначенное время.

Хотя вы можете запускать фоновые потоки в WCF или использовать срок действия кэша в качестве планировщика бедного человека, они будут останавливаться, когда ваш пул приложений перезагружается до следующего обращения к вашему веб-сайту и повторного запуска пула приложений. По крайней мере, выполнение запроса с компьютера, которым вы управляете, означает, что вы знаете, что пул приложений будет возвращаться каждые 10 минут или около того, потому что вы отправили запрос в его направлении.

1 голос
/ 23 марта 2009

Веб-приложение совсем не подходит для запуска чего-либо с фиксированным интервалом. Если поступающих запросов нет, в приложении не выполняется код, и если приложение какое-то время неактивно, IIS может принять решение полностью его закрыть, пока не поступит следующий запрос.

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

Если у вас есть доступ для администрирования базы данных, в SQL Server имеется планировщик. Он может запускать запросы, хранимые процедуры и даже запускать процессы, если у вас есть разрешение (хотя на общем хостинге это маловероятно).

Если вам нужен код в определенный промежуток времени, и вы не можете получить доступ к серверу, чтобы запланировать его или запустить как службу, или не можете использовать планировщик SQL Server, это просто невозможно.

0 голосов
/ 21 ноября 2011

Сделайте свой пул приложений "всегда активным" и делайте все что угодно с вашими потоками.

...