我们拥有一批 IIS 7.5 服务器来管理我们的托管产品。每代产品都有自己的 AppPool 和自己的站点。每代产品都绑定到 thegeneration.oursite.com,另外还有一个幸运的网站获得默认绑定(显然,这是客户实际访问的网站)。当我们准备切换到新站点时,我们有一个工具可以尝试将默认绑定从旧代切换到新代。此模式如下:
- 清除所有网站上的绑定。
- 在所有网站上重新建立自定义绑定
- 将默认绑定设置为新的活跃代。
到目前为止一切顺利。我们实现此目的的代码很简单,而且效果很好。
嗯,差不多。事情是这样的:无论我们做什么,无论我们如何构建事物,IIS 始终关闭新的默认绑定,抱怨现在有两个具有默认绑定的站点。无论我们使用Microsoft.Web.Administration
程序集还是编辑,都会发生这种情况applicationHost.config
。值得注意的是,在冲突警告后手动启动站点 100% 有效,并且applicationHost.config
程序集界面实际上在任何时候都不会显示两个具有默认绑定的站点。
当我们交换默认绑定时,如何防止 IIS 7.5 关闭?真的没有办法吗?
编辑:我被要求通过一个例子来澄清我的意思,所以我将介绍我们以这种方式管理的一个项目 Kiln 的实际升级。
假设我们从两代活跃的 Kiln 开始:Kiln1.0
和Kiln2.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 秒} 可能也会使其运行。