我们有一个繁忙的网络服务器,每秒处理大约 1000 个 asp.net 请求。
我们有一个部署脚本,它从我们的开发箱中复制已编译的 asp.net。
该脚本首先停止生产服务器上的 IIS,复制代码,然后重新启动。
我们使用以下命令来停止该站点的应用程序池:
%windir%\system32\inetsrv\appcmd 停止应用程序池/apppool.name:ourappname
问题在于,这会停止接受新请求,但会等待现有请求完成。通常有少数请求需要一分钟才能完成,在此期间不会处理任何新请求。因此,为了满足十几个请求,我们在等待 12-20 个请求完成的一分钟左右的时间里错过了处理 1000 * 60 = 60,000 个请求的机会。这很愚蠢。
我们最想做的是强制应用程序池在 x 秒内停止。这似乎不可能。有没有更好的方法来完成我们正在做的事情,即快速停止 iis 7?
答案1
为什么需要停止并重新启动应用程序池?更新 bin 目录中的文件将导致应用程序池在相关点重新启动。完成部署后,如果您未更新 bin 中的任何内容,则保存对 web.config 文件的更改将导致应用程序池重新启动。
如果您确实需要将其关闭,那么您可以在 IIS 级别(w3wp 服务)进行操作。
net stop w3wp
#Deploy
net start w3wp