我可以做些什么来确保在触发应用程序/应用程序池重启时,应用程序尽快恢复联机?
更好的是,有没有办法在通常的触发器发生时防止应用程序重新启动?比如修改 web.config、global.asax 或 machine.config?
我可以做些什么来确保在触发应用程序/应用程序池重启时,应用程序尽快恢复联机?
更好的是,有没有办法在通常的触发器发生时防止应用程序重新启动?比如修改 web.config、global.asax 或 machine.config?
ASP.NET 4.0 中将有一个“自动启动”功能(Scott Guthrie 谈到它),但现在这对您没有帮助。
请确保您的网站/应用程序正在运行的应用程序池不会自动进入“睡眠”状态。默认 AppPool 设置为在 20 分钟不活动后关闭。我记得这不会使网站重建,但会使第一个请求明显变慢。
小提示,也可以构建网站项目,因此您的 App_Code 将为空,并且您的 bin 文件夹将包含一堆 .dll (只需使用 Build > Build Website)。这肯定会使对您网站的第一个请求更快。我认为网站应用程序不会比预编译的网站项目更快地启动,但它更易于管理。
是的,迁移到 Web 应用程序将加快重启过程。另一件事是让你的 global.asax 尽可能干净。
即使使用 Web 应用程序,如果修改了这些配置文件中的任何一个或您的 bin 目录中的程序集发生更改,该站点也会重新启动。你无法阻止这一切。
重启时间应该很快,大约 2 到 3 秒。但是,我见过一些非常复杂的 global.asax 文件,它们设置了一些域级别的数据,这些数据最多需要 20 秒。当然,他们愿意为此付出代价,因为这将一些正常的页面加载时间从 3 秒减少到了 0.1 秒。
对于 Web 应用程序项目,您可以使用 Web 部署项目(VS2010 下载链接)将站点预编译为类似于网站项目的 DLL。请参阅ScottGu 文章,了解如何使用 WDP。
我们主要使用网站项目,所以我假设切换到 Web 应用程序项目会加快速度,因为所有代码文件都预编译为 .dll。
在使用网站项目时,我认为将 App_Code 文件移动到外部类库中也会加快速度,因为代码会被预编译。
我有一个类似的问题,因为我正在运行一个非常高流量的网站,每秒可以获得 300 多个请求。重新启动至少需要 90 秒。
当我进行重新启动服务器的更改时,重新启动似乎会停止,直到所有旧请求(其中一些运行时间很长)关闭。我可以通过手动杀死旧的 w3wp.exe 实例来加快重启速度。
是否有某种方法可以强制 IIS 立即关闭所有连接并进行硬重启?IIS 或 asp.net 中的一些设置来控制这个?