Можно ли запустить пользовательский поток в приложении C ++, размещенном на IIS? - PullRequest
1 голос
/ 07 ноября 2008

Мы размещаем приложение на основе C ++ для WebServices в IIS, и мы обнаруживаем, что когда мы пытаемся запустить наши собственные потоки C ++, в IIS происходит сбой. Потоки основаны на boost.thread, который явно соответствует стандартному API потоков Windows.

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

Итак, вопрос в том, должно ли это работать? Существуют ли какие-то ограничения на выполнение подобных вещей с IIS?

Ответы [ 4 ]

3 голосов
/ 07 ноября 2008

Похоже, вы создаете постоянный поток, который живет дольше, чем время жизни запроса, который его инициирует. Вы не упоминаете, является ли это ASP.NET C ++ / CLI, Managed C ++ или расширением ISAPI или фильтром, или даже CGI.

Концептуально код, вызываемый IIS, должен «жить» только в течение срока действия запроса. Код, который выполняется дольше, будет зависеть от рециркуляции пулов приложений IIS.

Лучше всего иметь другой процесс, который прослушивает уведомления, и поддерживать кэш в этом процессе. Затем вы можете использовать разделяемую память (см. Boost.Interprocess ) для доступа к этому кешу из вашей веб-службы.

0 голосов
/ 07 ноября 2008

Если не написать еще один процесс, чтобы слушать нас, я в растерянности, что еще я могу сделать.

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

0 голосов
/ 07 ноября 2008

Создание потока, скорее всего, не проблема - это то, что вы делаете в этом потоке. Я хотел бы взглянуть на код, который разделяет объекты, которые также используются потоками, которые создает IIS.

0 голосов
/ 07 ноября 2008

Я не знаю о C ++, но в моем приложении на C # ASP.NET я создаю потоки, и он работает нормально. Являются ли .NET "настоящими" потоками? Я не знаю ... но они ведут себя так, как будто вы хотите, чтобы нить вела себя. Может быть, вы можете использовать только эту часть вашего приложения в ASP.NET C #?

...