Назад | Перейти на главную страницу

Почему сценарии с помощью appcmd работают иначе, чем при использовании графического интерфейса пользователя IIS?

Я почесал себе голову об этом. Пожалуйста, помогите мне перестать царапаться.

У нас есть ручной способ решения проблемы с сайтом, с которой мы столкнулись. Временное решение всегда работает, когда мы выполняем шаги вручную, но запуск скрипта, который выполняет те же шаги, иногда работает, но обычно нет. Мой вопрос: В чем разница между выполнением шагов вручную и выполнением их по сценарию?

Ручные шаги:

  1. Остановить сайт
    • в диспетчере IIS выберите сайт, нажмите Stop
  2. Переработайте пул приложений, в котором работает серверная служба
    • в диспетчере IIS выберите пул приложений, нажмите «Переработать»
  3. Выполните вызов метода в серверной службе. Это необходимо для предварительного заполнения некоторых данных перед запуском сайта. Серверная служба - это .asmx
    • В Internet Explorer перейдите на страницу вызова метода серверной части, введите некоторые параметры и нажмите «Вызов».
  4. Запустить сайт
    • в диспетчере IIS выберите сайт, нажмите Пуск

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

Поэтому я пишу пакетный скрипт, который, по сути, делает следующее:

%windir%\system32\inetsrv\appcmd.exe stop site nameOfSite
%windir%\system32\inetsrv\appcmd.exe recycle apppool nameOfAppPool
curl...(call web method with headers and parameters identical to what IE does)
%windir%\system32\inetsrv\appcmd.exe start site nameOfSite

В curl call в Fiddler выглядит идентично использованию IE для выполнения вызова. Далее я заменил curl вызов с паузой, поэтому сценарий дает мне возможность использовать IE для вызова веб-метода. Так что я почти уверен, что это не та фраза.

Я поставил задержки между этапами.

Я пробовал запускать / останавливать appPool (вместо повторного использования).

Я пробовал делать то же самое с Python:
subprocess.check_output([params to call appcmd], shell=True)

Ни одна из этих попыток не меняет поведения:

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

Для меня это не имеет смысла. Вам это нравится? Есть ли альтернатива appcmd что более внимательно делает то, что IIS делает при запуске / остановке / перезапуске? Что я делаю не так?

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

Я предполагаю, что вы являетесь администратором, но является ли учетная запись времени выполнения сценария также учетной записью уровня администратора?

Проверь это....