Лучший подход к запуску потока/процесса в IIS/WCF на общем хостинге

StackOverflow https://stackoverflow.com/questions/673402

Вопрос

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

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

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

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

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

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

Спасибо.

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

Сделайте пул приложений «всегда активным» и делайте со своими потоками все, что захотите.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top