首先,我要说的是,我在这里谈论的是开发服务器。因此,请恕我直言,请不要给出任何“你不应该这样对待你的客户”之类的回答或评论。我已注意到这一点,我永远不会这样做。
根据这篇网络文章, 它应该绝不需要重置/重新启动(有区别吗?)IIS 服务器以使配置更改生效:
IIS 7.0+ 旨在自动获取配置更改。每当您部署新网站、更改网站绑定或修改任何其他服务器级配置时,都会发生这种情况。IIS 会自动将您的更改应用于:
- Web.config(应用程序级别):IIS 触发受影响应用程序的重新启动。
我所讨论的部分实际上包含一个表格而不是项目符号列表,并介绍了所有不同的可能配置更改以及发生这些更改时 IIS 会做什么。但是,我发现他们对所提及的更改类型的假设完全是胡说八道(至少在开发服务器上)。
经常发生的情况是,在开发过程中,我会更改应用程序的 Web.config 中的某些内容并输入错误,或者只是明显出错,然后 IIS 突然崩溃。每次尝试纠正错误都会导致页面重新加载时间少于 30 毫秒,并且显示完全相同的 ASP.NET 错误页面。所以我的“生锈的锤子”(这些人这样称呼它)就是命令iisreset
。
但正如他们进一步提到的那样这篇相关文章,它是一种古老且(通常)过度的工具,可以据称由应用程序池回收完成:
底线:永远不需要使用 IISRESET 来获取配置更改有关此内容的完整详细信息,请参阅重置、重新启动和回收 IIS 指南中的确保 IIS 已获取网站、应用程序池或配置更改部分。
最后一句话与第一篇文章有关。但在我所描述的特定场景中,应用程序池回收对我来说从来都不起作用!
所以我完全理解为什么它不好,并且不想iisreset
但我感觉我别无选择。这是真的吗,或者我可以使用更好的命令?
附言:我读过尝试运行以本地管理员身份登录的 IISReset 时访问被拒绝和Brondahl 的回答,这实际上就是我读到上述两篇文章的原因。因此,我很想使用他们都提到的解决方法,但在阅读了历史iisreset
以及为什么应该将其删除后,我更愿意使用一些简洁而不过度的方法。
答案1
我将这些命令放入批处理文件(NT 命令脚本)中以停止并重新启动 IIS。
@echo off
echo.
echo Stopping Web Server
echo.
net stop w3svc
echo.
net stop iisadmin
echo.
sleep 5000
echo.
echo Starting Web Server
echo.
net start iisadmin
echo.
net start w3svc
echo.
pause
exit