如何在不关闭 IIS 7.5 的情况下以编程方式切换其默认绑定?

如何在不关闭 IIS 7.5 的情况下以编程方式切换其默认绑定?

我们拥有一批 IIS 7.5 服务器来管理我们的托管产品。每代产品都有自己的 AppPool 和自己的站点。每代产品都绑定到 thegeneration.oursite.com,另外还有一个幸运的网站获得默认绑定(显然,这是客户实际访问的网站)。当我们准备切换到新站点时,我们有一个工具可以尝试将默认绑定从旧代切换到新代。此模式如下:

  1. 清除所有网站上的绑定。
  2. 在所有网站上重新建立自定义绑定
  3. 将默认绑定设置为新的活跃代。

到目前为止一切顺利。我们实现此目的的代码很简单,而且效果很好。

嗯,差不多。事情是这样的:无论我们做什么,无论我们如何构建事物,IIS 始终关闭新的默认绑定,抱怨现在有两个具有默认绑定的站点。无论我们使用Microsoft.Web.Administration程序集还是编辑,都会发生这种情况applicationHost.config。值得注意的是,在冲突警告后手动启动站点 100% 有效,并且applicationHost.config程序集界面实际上在任何时候都不会显示两个具有默认绑定的站点。

当我们交换默认绑定时,如何防止 IIS 7.5 关闭?真的没有办法吗?

编辑:我被要求通过一个例子来澄清我的意思,所以我将介绍我们以这种方式管理的一个项目 Kiln 的实际升级。

假设我们从两代活跃的 Kiln 开始:Kiln1.0Kiln2.0。这意味着我有使用这些名称的 AppPools 和使用这些名称的站点。基本上,客户使用Kiln1.0;只有我们的测试人员和 beta 用户使用Kiln2.0。Kiln 帐户属于子域,因此要实现这一点,站点Kiln2.0具有例如*:80:foo.kilnhg.com*:80:bar.kilnhg.com等的绑定,并且Kiln1.0站点具有绑定*:80:*,以便任何未明确使用测试代的人都在新一代上。

当我们想将所有人升级到 时Kiln2.0,我们希望删除*:80:*上的绑定Kiln1.0并在 上创建它Kiln2.0。我遇到的问题是任何实现这一目标的方法都行不通Kiln2.0,IIS 声称绑定重复。正是该特定绑定导致了问题。

答案1

听起来您可能是 IIS 配置更新延迟的受害者。

通常,可以通过减少步骤数(例如,为什么要清除然后重新建立绑定?只需一次性替换它们然后提交更改)或添加等待状态来避免这种情况。

是的,等待状态。批处理文件/脚本/程序中间的{休眠 10 秒} 可能也会使其运行。

相关内容