在IIS7中重新部署ASP.NET站点,而不使用正在干扰的文件

fyj*_*ham 8 c# asp.net iis iis-7

我们目前有一个进程可以重新部署ASP.NET网站.代码本身就是一个ASP.NET应用程序.当前的方法已经工作了一段时间,只是循环遍历一个文件夹中的所有文件,并将它们复制到webroot中文件的顶部.

出现的问题是偶尔文件最终被使用,因此无法复制.这在过去是断断续续的,无关紧要,但在我们的一些较高流量站点,它现在大部分时间都会发生.

我想知道是否有人有一个解决方法或替代方法,我没有想到.目前我的想法是:

  1. 只需重试每个文件,直到它工作.这会导致错误很短的时间虽然不是那么好.
  2. 部署到新文件夹并将IIS的webroot更新到新文件夹.我不确定如何以管理员身份运行应用程序并运行批处理文件,这是非常不整洁的.

有没有人知道最好的方法是什么,或者如果没有像拥有管理员权限的用户那样运行发布应用程序就可以做#2(愿意授予它特殊权限,但我宁愿不要管理员)?

编辑
基础架构的澄清......我们在NLB中有2个IIS 7 Web服务器从共享NAS运行他们的webroots(更清楚的是,他们在NAS上使用完全相同的webroot).我们进行了大量的部署,以至于任何我们无法实现自动化的方法都无法实现.

Fra*_*nov 12

您需要做的是临时阻止IIS处理该应用程序的任何传入请求,以便您可以复制新文件然后再次启动它.这将导致您的客户停机时间很短,但除非您的网站是关键任务,否则这不应该是一个大问题.

ASP.NET具有针对此方案的功能.基本上,它归结为在webapp的根目录中临时创建名为App_Offline.htm的文件.一旦文件存在,IIS将删除您的应用程序的工作进程并卸载正在使用的任何文件.复制文件后,可以删除App_Offline.htm文件,IIS将很快再次开始搅拌.

请注意,当该文件存在时,IIS将提供其内容作为对您的webapp的任何请求的响应.所以要小心你放在文件中的内容.:-)

  • 在这些方面,我们在服务器场中有多个Web服务器,并将它们单独删除以进行更新.这个过程是:1.从服务器场中拉出服务器,2.更新它的代码,3.运行iisreset,4.将其重新轮换,5.继续下一个服务器. (6认同)