C# 在IIS7中重新部署ASP.NET站点而不使用文件
我们目前有一个进程导致ASP.NET网站被重新部署。代码本身就是一个ASP.NET应用程序。当前的方法已经工作了相当长一段时间,只需在一个文件夹中的所有文件上循环,然后将它们复制到webroot中文件的顶部 出现的问题是,有时文件会被使用,因此无法复制。这在过去是断断续续的,已经到了无关紧要的地步,但在我们一些流量较高的网站上,这种情况现在大部分时间都在发生 我想知道是否有人有我没有想到的解决方法或替代方法。目前我的想法是:C# 在IIS7中重新部署ASP.NET站点而不使用文件,c#,asp.net,iis,iis-7,C#,Asp.net,Iis,Iis 7,我们目前有一个进程导致ASP.NET网站被重新部署。代码本身就是一个ASP.NET应用程序。当前的方法已经工作了相当长一段时间,只需在一个文件夹中的所有文件上循环,然后将它们复制到webroot中文件的顶部 出现的问题是,有时文件会被使用,因此无法复制。这在过去是断断续续的,已经到了无关紧要的地步,但在我们一些流量较高的网站上,这种情况现在大部分时间都在发生 我想知道是否有人有我没有想到的解决方法或替代方法。目前我的想法是: 只需重试每个文件,直到它工作。这将在短时间内导致错误,但这并不是很好
基础设施的澄清。。。NLB中有2台IIS 7 Web服务器在共享NAS上运行其webroot(更清楚地说,它们在NAS上使用的是完全相同的webroot)。我们进行了大量部署,以至于任何无法自动化的方法都不可行。在尝试复制文件之前,您还可以尝试修改根文件夹中web.config的时间戳。这将卸载应用程序并释放使用过的文件。您需要做的是暂时停止IIS处理该应用程序的任何传入请求,以便您可以复制新文件,然后重新启动它。这会给你的客户带来一个小的停机时间,但除非你的网站是任务关键型的,否则这应该不是一个大问题 ASP.NET有一个。基本上,它归结为在webapp的根目录中临时创建一个名为App_Offline.htm的文件。一旦文件存在,IIS将关闭应用程序的工作进程并卸载所有正在使用的文件。一旦你复制了你的文件,你就可以删除App_Offline.htm文件,IIS将很高兴地再次开始搅动
请注意,当该文件存在时,IIS将其内容作为对您的webapp的任何请求的响应。因此,请注意您在文件中输入的内容。:-) 除非您手动打开web服务器上文件的句柄,否则IIS不会锁定您的文件 尝试关闭可能锁定您的文件的其他服务。一些共同服务的例子就是这样做的:
- Windows搜索
- 谷歌桌面搜索
- Windows备份
- 任何其他防病毒或索引软件
关于您的2,请注意WMI不像ADSI那样需要管理员权限。您可以按对象配置权限。检查WMI控制台(mmc)。由于您已经在两台web服务器之间进行负载平衡,您可以:
我们为网络服务和IIS_WPG用户提供了对整个web根目录的读/写访问权限,从而解决了我们的文件正在使用、文件锁定、超时和访问被拒绝的问题。复制进程和IIS循环工作进程之间仍然存在竞争条件。所以,是的,它可能会工作,但也可能不会。我本以为如果有新的请求进来,它就更有可能访问文件,因为它必须重新加载所有内容?除非是打赌在下一个请求之前进入,如果是这样的话,我真的不认为这在我所说的网站上是可能的。其中一个运行的API非常频繁,我们在部署堆栈溢出时也经常遇到这种情况;IIS7似乎会对它所服务的一些文件保持暂时锁定,就像基于文件的俄罗斯轮盘赌.Fyjham-您应该在问题中添加一个注意事项,即您有一个web服务器场,其中两台服务器共享来自NAS的代码-因为这将有一个主要的