2013-03-05 4 views
2

В принципе у меня есть веб-сайт, на котором будет выполняться фоновое задание для выполнения некоторых обязанностей по обслуживанию, пока он не простаивает. Когда он простаивает, эти процессы не нужно запускать.Правильный способ для одного сайта сохранить жизнь в IIS?

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

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

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

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

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

+0

напишите 1 веб-сервис на один сайт и используйте его с другой стороны, чтобы проверить, что вам нужно от задней части. – RandomUs1r

+1

Обратите внимание, что это неправильный инструмент для работы. У вас должно быть задание службы Windows/Запланированное задание либо выполнять техническое обслуживание, либо вызывать страницу на своем веб-сайте и получать ее для обслуживания. Обратите внимание: если работа долговечна, вам нужно возиться с тайм-аутами и ограничениями ресурсов, чтобы предотвратить ее убийство - что может иметь негативный эффект в другом месте вашего сайта. – Basic

ответ

0

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

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

  • Поддержание блокировки (например, физического файла, записи в базе данных ...) и только запуск задачи, если другой сайт не удерживает блокировку.
  • Сделать задачу вызываемой на сайте A, а затем называть ее сайтом B, а не запускать задачу самостоятельно. Затем сайт A может отслеживать, запущена ли эта задача.
  • Все решения, которые вы указали сами (особенно отделяющие фоновые задачи от сайтов вообще), которые являются лучшими решениями, чем выше.

Надеюсь, что это поможет.

+0

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

0

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

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

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

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