我正在尝试理解.net管道以及如何处理请求(MVC和Asp.net)并且我已经达成了这种理解。 如果我错过任何一步和我的疑惑,有人可以发表评论。
我的理解:
1)请求来到IIS。
2)IIS只是一个进程,并将请求指向它所映射的应用程序池。
3)应用程序池有工作进程。
4)工作进程加载ISAPI过滤器并创建运行时对象。
5)从应用程序的global.asax调用Application_start。
6)对于MVC,检查路由,然后将请求移动到特定控制器。类似地,asp.net请求“以某种方式”移动到特定页面。
问题 - 应用程序池有很多应用程序,因此有很多application_start方法。它如何映射到正确的应用程序?
问题 -Asp.net请求“某种程度上”移至特定页面。有人可以告诉我这是怎么回事。
由于
答案 0 :(得分:1)
问题-Asp.net请求是"不知何故"转移到特定页面。可以 有人告诉我这是怎么发生的。
请求通过管道中的已定义阶段(无论ASP.NET网页或ASP.NET MVC)
当阶段ExecuteRequestHandler到来时 - 处理适当的处理程序。例如:在webforms的情况下,您的页面基本上继承了实现System.Web.UI.Page
接口的IHttpHandler
,而在MVC的情况下;实施MVCHandler
的{{1}}被调用。
IHttpHandler ProcessRequest()方法在MVC的情况下负责执行所需的控制器,就像调用webforms的page_load方法一样。
现在要在应用程序管道中的MapRequestHandler阶段决定要使用的处理程序。
您可以在此处获取详细的流量信息:MVC Request Pipleline
问题 - 应用程序池有很多应用程序,因此很多 application_start方法。它如何映射到正确的应用程序?
直接从msdn引用:
请求到达,ASP.NET运行时为其创建AppDomain 应用。然后它创建HttpApplication的第一个实例 AppDomain中的类。 AppDomain可能会创建后续的 HttpApplication类的实例,因为ASP.NET可以创建一个 实例池。每个Web服务器请求都由a提供服务 HttpApplication类的单个实例。