Я почесал себе голову об этом. Пожалуйста, помогите мне перестать царапаться.
У нас есть ручной способ решения проблемы с сайтом, с которой мы столкнулись. Временное решение всегда работает, когда мы выполняем шаги вручную, но запуск скрипта, который выполняет те же шаги, иногда работает, но обычно нет. Мой вопрос: В чем разница между выполнением шагов вручную и выполнением их по сценарию?
Ручные шаги:
Как я уже сказал, это всегда приводит сайт к полной функциональности. Это должно быть доступно сценариям, верно?
Поэтому я пишу пакетный скрипт, который, по сути, делает следующее:
%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 делает при запуске / остановке / перезапуске? Что я делаю не так?
Каковы разрешения для учетной записи пользователя, на котором запущен сценарий.
Я предполагаю, что вы являетесь администратором, но является ли учетная запись времени выполнения сценария также учетной записью уровня администратора?
Проверь это....