2015-10-15 69 views
2

我的请求被如何在IIS 7.0中处理的理解如下:谁在ASP.Net MVC管道中首先执行?

  1. 当请求进来IIS,URLRoutingModule处理它。
  2. 如果ÙRLRoutingModule找到一个无扩展名的URL(即在RouteTable内),那么它会映射到相应的控制器。

但是,我无法找到以下问题的答案。

  1. 以前,我已经研究了aspnet_isapi.dll处理所有ASP.NET相关活动。那么,在首先执行的HTTP管道中呢? [URLRoutingModule or ASPNET_ISAPI.DLL]

  2. ,并ASPNET_ISAPI.DLL一个HTTP HandlerISAPI Extension

(我已阅读,http handler可以通过从IHttpHandler推导来实现,而写一个isapi extension我们需要非托管代码在C/C++)

回答

4

在HTTP管道,它最先被执行? [URLRoutingModule或ASPNET_ISAPI.DLL]

ASPNET_ISAPI.DLL首先执行。它将控制转移到受管ASP.NET运行时并根据需要调用URLRoutingModule

ASPNET_ISAPI.DLL是HTTP处理程序还是ISAPI扩展?

这是一个ISAPI扩展:

MSDN

ASP.NET功能包含在所谓的Aspnet_isapi.dll的ISAPI DLL。

HTTP处理程序是管理处理程序由ASP.NET运行时调用。

HTTP Handlers and HTTP Modules Overview

ASP.NET HTTP处理是过程(经常被称为“端点”),其响应于请求运行作出到ASP.NET Web应用

+0

@D士丹利:别急。 ''SPNET_ISAPI.dll'似乎处理请求并生成响应。那么,它遵循'HTTP Handler'的相同定义,以及它为什么不被称为'HTTP Handler'? –

+1

@nowhewhomustnotbenamed。我假设“HTTP处理程序”是指_managed_ HTTP处理程序。这些由ASP.NET运行时调用,该运行时由IIS调用的“ASPNET_ISAPI.DLL”调用。 –

+0

太好了。但是这意味着,如果前者首先被处理(通过管道中的ASPNET_ISAPI.dll),'.ASPX'页面比MVC页面呈现更快? –

3

ASPNET_ISAPI.DLL是一个ISAPI扩展。这些扩展是在IIS中注册的组件(DLL,脚本,可执行文件)。每个扩展都被注册来处理特定的请求,因为IIS本身处理的只有极少数。例如,名称扩展名被注册以处理所有标识为ASP.NET相关的请求。

ISAPI筛选器是用于添加一些行为在IIS管理请求的方式中的DLL。他们正在监听所有传入的请求,直到他们找到可以处理的请求。

注意,上述两个概念都为IIS定义。 HttpModules和HttpHandlers是不同的。

的HttpModules和HttpHandlers的是纯粹的ASP.NET对象,因此与之相关的所有事情发生的IIS处理请求ASP.NET管道之后。然而,他们在ASP.NET中的角色类似于IIS中的角色 - 处理程序处理特定请求,模块拦截所有请求并处理其配置中指定的一些请求。

URLRoutingModule是一个标准的HttpModule,它拦截处理过的ASP.NET请求,并且如果其中注册的任何路由匹配请求,则触发相应的HttpHandler。 ASp.NET MVC的默认处理程序是MvcRouteHandler,然后使用MVC触发与控制器相关的活动。

进一步阅读的一些链接:

+0

很好的解释。谢谢。因此,'ISAPI扩展'与'HTTP处理程序'非常相似,'ISAPI过滤器'与'Http Modules'相似,只是前者不受管理。 Andrei,我的理解是否正确? –

+0

权,虽然其他显著不同的是,ISAPI *存在于IIS的水平,和HTTP模块/处理器仅仅是ASP.NET水平。前进先出 – Andrei

+0

噢好吧。因此,首先调用ASPNET_ISAPI,然后如果没有找到'.aspx',那么它会转到'URLRoutingModule'? –