1.)将变更集推送到IIS中的站点.
2.)不要打断用户.
3.)能够毫不费力地回滚.
所以,我知道有一些事情要发生:
1.)在Proc会话之外 – 处理
2.)超出Proc缓存 – 处理
所以仍然存在的问题:
1.)我如何防止打断用户?如果我只是将文件上传到bin,该应用程序将回收并需要10秒钟才能恢复在线状态
2.)我如何毫不费力地回滚?
我想可能的解决方案是在IIS中设置两个站点,一个是公共站点,一个是私有站点.上传到私人并获得预热.预热后,网站会被交换.回滚只需要在没有上传的情况下交换到私有.
这似乎在理论上是合理的,但我不确定机制.有任何想法吗?
解决方法
要进行设置,您将需要:
> IIS Application Request Routing(ARR)模块
> IIS Web Deployment工具(msdeploy)
> 3个不同的IIS网站(具有3个不同的IP地址 – 仅使用端口或主机头可能在此处不起作用)
首先安装ARR.
在IIS中设置3个网站:
>网站1将是您的用户实际连接的网站,比如说http://192.168.1.1/.这也是ARR网站.只需设置一个空目录,指向它,并将其放在自己的应用程序池中.根据these instructions将应用程序池设置为不超时.
>网站2和3将是实际托管您的内容的网站.这些需要在他们自己的IP上,并且由于ARR如何工作,在与网站1不同的端口上.让我们说它们是http://192.168.1.2:8080和http://192.168.1.3:8080.它们也应该位于自己的应用程序池中,并指向文件系统上的不同目录(但两个目录通常具有相同的内容)
安装ARR后,IIS Manager中将出现一个名为“Server Farms”的新类别 – 右键单击该类并创建一个新服务器场.
>给它一个对你有意义的名字
>添加Webserver 2和Webserver 3作为服务器 – 确保单击“高级设置”按钮,打开“applicationRequestRouting”类别,并将每个服务器的httpPort更改为8080
>完成向导 – 系统将询问您是否要创建URL重写规则 – 单击是
>您现在有一个服务器场 – 要完成配置,转到服务器场并单击代理配置按钮 – 打开“在响应头中反向重写主机”并应用更改
>在IIS管理器中,转到根级别服务器类别,然后单击“URL重写”按钮,将为您的服务器场创建一个规则
>双击规则以进入设置
>打开“条件”框
>为{SERVER_PORT}添加新条件与8080不匹配
>应用更改
此时,您掌握了完成请求所需的基础知识.如果你去http://192.168.1.1/,你将从网站1或网站2获得你的网站,但它将与其他网站完全无缝.
现在,当您要部署新版本的应用程序时,您可以执行的操作是:
>您的服务器场中的服务器的drainstop 1(在服务器场工具中,转到“监视和管理”,选择服务器并选择“使服务器无法正常使用”)
>将新版本的站点部署到脱机系统
>使用备用IP /端口预热脱机的站点
>再次将该站点提供给服务器场
>为其他服务器重复此过程
当您谈论想要编写所有这些脚本时,Web部署工具就会发挥作用.它使您可以非常轻松地为应用程序创建程序包并从命令行进行部署.如果有问题,您也可以轻松地回滚该包. ARR is also scriptable使用Microsoft.Web.Administration dll.
另一件事 – 如果你实际上在Windows 2008 R2(这是IIS 7.5)上看看Application Warmup模块 – 它应该使你的预热部分更容易.