Вопрос

Я хочу запустить «фоновое задание» в моем приложении ASP.NET (периодически, как отдельный поток).И мне нужно имя хоста (имя DNS или IP) для выполнения моих задач.Проблема в том, что здесь может быть недоступен генерирующий кодовый код (это сгенерированный код).

Есть ли способ получить имя хоста без использования HttpContext.Current.

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

Решение

Когда имя хоста доступно в HttpContext.Request.Url.Host, это результат того, что имя хоста является частью запроса, отправленного клиентом.В качестве примера возьмем запрос на эту страницу:

родовое слово

При работе в фоновом потоке контекст запроса недоступен, и вообще нет понятия имени хоста.Единственная альтернатива - сохранить имя хоста в коде или в конфигурации.

Немного не по теме: выполнение запланированных задач в веб-приложении вызывает проблемы, а порождение потоков касается только некоторых из них.Если это вообще возможно, рассмотрите возможность выполнения запланированных заданий из службы Windows, возможно, созданной с использованием такой инфраструктуры, как NCron .

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

возможно, вы можете добавить переменную класса в свой класс потока и установить эту переменную с помощью request.url.host перед запуском класса потока.

этот метод также может применяться к объекту сеанса.

Помните, что запускать это «фоновое задание» из веб-приложения - плохая идея, если вам нужно, чтобы этот фоновый процесс работал круглосуточно и без выходных.Даже если вы запустите его в новом потоке.Ваше веб-приложение может не получать запросов в течение некоторого времени.В этом случае среда выполнения завершит процесс и все его «дочерние» потоки.Для непрерывной работы вам необходимо запустить его как службу Windows.В противном случае Даррен прав, используйте System.Net.Dns.GetHostName ().

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

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

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