我可以做些什么来确保在触发应用程序/应用程序池重启时,应用程序尽快恢复在线状态?
更好的是,有没有办法在通常的触发器发生时阻止应用程序重启?比如修改web.config,global.asax或machine.config?
答案 0 :(得分:4)
ASP.NET 4.0中会有一个“自动启动”功能(Scott Guthrie talks about it),但现在对你没有帮助。
请确保您的网站/应用程序运行的应用程序池不会自动进入“休眠”状态。默认AppPool设置为在20分钟无效后关闭。我记得这不会使网站重建,但是第一次请求速度明显变慢。
小编,网站项目也可以构建,因此您的App_Code将为空,您的bin文件夹将包含一堆.dll(仅使用Build> Build Website)。这肯定会使您对网站的第一次请求更快。我认为网站应用程序的启动速度不会超过预编译的网站项目,但它更容易管理。
答案 1 :(得分:1)
是的,迁移到网络应用会加快重启过程。另一件事是尽可能使你的global.asax干净。
即使使用网络应用,如果修改了任何配置文件或者bin目录中的程序集发生更改,网站也会重新启动。你无法阻止这一点。
重启时间应该快2到3秒左右。但是,我已经看到一些非常复杂的global.asax文件,这些文件设置了一些占用时间长达20秒的域级数据。当然,他们愿意支付这个价格,因为它将正常的页面加载时间从3秒减少到0.1秒。
答案 2 :(得分:0)
主要是,我们使用网站项目,因此我认为切换到Web应用程序项目会加快这一速度,因为所有代码文件都已预编译为.dll。
使用网站项目时,我认为将App_Code文件移动到外部类库也会加快速度,因为代码是预先编译的。
答案 3 :(得分:0)
对于Web应用程序项目,您可以使用Web部署项目(VS2010 download link)将站点预编译为类似于网站项目的DLL。请参阅ScottGu article on how to use WDPs。
答案 4 :(得分:0)
我遇到了类似的问题,因为我正在运行一个非常高的流量网站,每秒可获得300多个请求。重启至少需要90秒。
当我进行重新启动服务器的更改时,似乎重启停止,直到所有旧请求(其中一些非常长时间运行)关闭。通过手动杀死旧的w3wp.exe实例,我可以更快地完成重启。
是否有某种方法可以强制IIS立即关闭所有连接并重新启动? IIS或asp.net中的一些设置来控制它?