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

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

我已经为此伤透了脑筋。请帮我停止挠头吧。

我们有一个手动解决方法,可以解决我们遇到的一个网站问题。当我们手动执行这些步骤时,解决方法总是有效的,但运行执行相同步骤的脚本有时会有效,但通常不会。我的问题是:为什么手动执行这些步骤和根据脚本执行这些步骤之间会有区别?

手动步骤如下:

  1. 停止网站
    • 在 IIS 管理器中,选择站点,单击停止
  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

在 Fiddler 中,调用curl看起来与使用 IE 进行调用完全相同。此外,我用curl暂停替换了调用,因此脚本让我有机会使用 IE 调用 Web 方法。所以我很确定不是那行。

我在各个步骤之间设置了延迟。

我已尝试启动/停止 appPool(而不是回收)。

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

这些尝试都无法改变行为:

  • 每一步都报告成功
  • 有时网站实际上是可以运行的,并且一切正常
  • 很多时候,网站会在一分钟后再次关闭。如果我通过 IIS 和 IE 执行这些步骤,这种情况永远不会发生。
  • 有时最后一步没有成功,网站仍然处于瘫痪状态。

当脚本失败时,仅仅重新运行脚本是行不通的。我必须手动执行这些步骤,然后一切才好。

我觉得这毫无意义。你觉得呢?有没有其他方法可以appcmd更接近 IIS 在启动/停止/回收时所做的操作?我做错了什么?

答案1

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

我假设您是管理员,但是脚本运行时帐户也是管理员级别的帐户吗?

检查一下....

相关内容