为什么使用appcmd的脚本与使用IIS GUI的行为不同?

我已经抓住了我的头。 请帮我停止划伤。

对于我们遇到的网站问题,我们有一个手动解决方法。 当我们手动执行这些步骤时,解决方法总是有效的,但是运行执行相同步骤的脚本有时可以正常工作,但通常不会。 我的问题: 为什么手动执行这些步骤和在脚本下执行它们有什么不同?

手动步骤是:

  1. 停止站点
    • 在IISpipe理器中select该站点,单击停止
  2. 回收运行后台服务的应用程序池
    • 在IISpipe理器中,select应用程序池,单击回收
  3. 调用后端服务上的方法。 这是在将网站上传之前预先填充一些数据。 后端服务是一个.asmx
    • 在Internet Explorer中,导航到后端的方法Invoke页面,input一些参数,点击“Invoke”
  4. 启动网站
    • 在IISpipe理器中,select该站点,然后单击开始

正如我所说的,这总是使网站具有完整的function。 这应该是这样的脚本,对不对?

所以我写了一个基本上这样的批处理脚本:

%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调用在Fiddler中与使用IE进行调用相同。 此外,我已经用一个暂停来replacecurl调用,所以脚本给了我一个使用IE调用web方法的机会。 所以我很确定这不是那条线。

我已经把步骤之间的延迟。

我试着开始/停止appPool(而不是回收)。

我试过用Python做同样的事情:
subprocess.check_output([params to call appcmd], shell=True)

这些尝试都不会改变行为:

  • 每一步都报告成功
  • 有时候这个网站实际上已经起来了,一切都很好
  • 大多数情况下,大约一分钟后,网站就会回落。 如果我通过IIS和IE执行这些步骤,则永远不会发生。
  • 偶尔最后一步不成功,网站仍然停滞。

当脚本失败时,仅仅重新运行脚本就不会工作。 我必须手动执行这些步骤,那么一切都很好。

这对我来说没有意义。 对你来说呢? 有没有一个替代appcmd更紧密地做什么IIS在启动/停止/回收? 我究竟做错了什么?

运行脚本的用户帐户的权限是什么?

我假设你是一个pipe理员,但脚本运行时帐户也是一个pipe理员级别的帐户?

检查…