asp.net-MVC。如何判断IIS是否已准备好开始提供页面服务

时间:2010-11-23 18:09:43

标签: asp.net-mvc iis-7 status

我正在构建一个asp.net MVC 2应用程序,该应用程序有一个ping页面,让另一个系统知道应用程序是否启动并运行。我相信这也用于保持负载均衡器了解活动节点。这就是我在控制器中的行为。

 public ActionResult PingApp()
            {
                // If we get here this node is alive. Echo "Ok".
                return Content("OK");
            }

我认为它无法正常工作,因为当我启动或重新启动应用程序时,需要在应用程序真正准备就绪之前设置许多其他任务并且“确定”。 (即加载dll,预编译aspx页面等。如果我理解正确的话)。我正在使用IIS 7.有谁知道我如何检查并查看IIS和我的应用程序是否真正“准备好”     - 谢谢。

2 个答案:

答案 0 :(得分:1)

Asp.net MVC是一个Web应用程序,而不是一个Web站点(在此stackoverflow问题中为differences),并且每页预编译。运行其DLL时,Asp.net MVC完全被JIT编译到平台并正在运行。

因此,如果您的页面是同一个程序集的一部分,那么所有其他页面也应该正常运行。如果其他页面需要其他程序集的功能,那么它们将按需加载。

加载所有程序集

如果你希望你的PingApp加载它们,你应该在它们内部调用一些虚拟功能,这样它们就可以进行JIT编译,加载和执行。

第一次调用PingApp将需要一些时间来实现JIT编译并加载您的Web应用程序并运行它。

答案 1 :(得分:0)

我认为这取决于“真正准备好”的含义,但该解决方案有效。

ASP.NET/IIS/.NET有目的地在完全需要之前不做某些事情 - 比如加载尚未使用的类型或编译ASPX页面(包括这里的视图)。

如果你绝对想要确保某些内容已经“加载到内存中”,那么你只需通过某种方式引用它们就可以让你的Action被加载。即使实例化类的默认实例也会导致找到并加载该库。

但这真的有必要吗?这会导致应用程序及其所有组件的不必要加载,当你真正想知道的是“服务正在运行”吗?