您的位置:首页 > 编程语言 > ASP

请求进入 ASP.NET 引擎时将会发生什么情况

2009-02-22 22:45 267 查看
ASP.NET 之前,需要使用 ISAPI 筛选器来实现 IIS Web 服务器上的 URL 重写。由于 ASP.NET 引擎与 IIS 非常相似,因此可以使用 ASP.NET 进行 URL 重写。存在相似之处的原因在于 ASP.NET 引擎可以实现以下功能:

在处理请求时可以引发事件。

允许任意数量的 HTTP 模块处理所引发的事件,这与 IIS 的 ISAPI 筛选器相似。

将呈现被请求资源这项任务委托给 HTTP 处理程序,该处理程序与 IIS 的 ISAPI 扩展相似。

与 IIS 一样,ASP.NET 引擎在请求的有效期内将会触发事件,通过发信号来表示其处理过程从一个状态改变为了另一个状态。例如,当 ASP.NET 引擎首次响应请求时,BeginRequest事件将被触发。接下来触发的是AuthenticateRequest事件,该事件在已建立用户标识时出现。(此外,还有大量的其他事件:AuthorizeRequestResolveRequestCacheEndRequest,等等。这些事件属于System.Web.HttpApplication类;有关详细信息,请参阅位于以下网址的技术文档:HttpApplication Class Overview。)


如上一部分所讨论的,可以创建 ISAPI 筛选器以响应 IIS 引发的事件。同样,ASP.NET 提供了 HTTP 模块,该模块可以响应由
ASP.NET 引擎引发的事件。可以将 ASP.NET Web 应用程序配置为具有多个 HTTP 模块。对于由 ASP.NET
引擎处理的每个请求,将初始化每个已配置的 HTTP
模块,并允许将事件处理程序绑定到处理请求期间所引发的事件。请注意,对每个请求均使用了许多内置 HTTP 模块。其中的一个内置 HTTP 模块是FormsAuthenticationModule,该模块首先检查是否使用了窗体身份验证,如果使用,将检查是否对用户进行了身份验证。如果没有使用,会自动将用户重定向到指定的登录页面。


上所述,通过使用 IIS,传入请求将最终发送给 ISAPI 扩展,而 ISAPI 扩展的任务是返回特定请求的数据。例如,在请求传统的 ASP
网页时,IIS 将请求传递给 asp.dll ISAPI 扩展,该扩展的任务是返回被请求的 ASP 页面的 HTML 标记。ASP.NET
引擎使用相似的方法。初始化 HTTP 模块后,ASP.NET 引擎的下一项任务是确定应由哪个 HTTP 处理程序来处理请求。

所有通
过 ASP.NET 引擎传递的请求最终都将到达 HTTP 处理程序或 HTTP 处理程序工厂(HTTP 处理程序工厂仅返回 HTTP
处理程序的实例,然后使用该实例来处理请求)。最终的 HTTP 处理程序将返回响应,即呈现被请求的资源。此响应将被发送回 IIS,然后 IIS
将响应返回给提出请求的用户。

ASP.NET 包括许多内置的 HTTP 处理程序。例如,PageHandlerFactory用于呈现 ASP.NET 网页。WebServiceHandlerFactory用于呈现 ASP.NET Web 服务的响应 SOAP 信封。TraceHandler将向trace.axd呈现请求的 HTML 标记。


2 描述了如何处理对 ASP.NET 资源的请求。首先,IIS 接收到请求,并将请求调度给
aspnet_isapi.dll。接下来,ASP.NET 引擎对已配置的 HTTP 模块进行初始化。最后将调用正确的 HTTP
处理程序,并呈现被请求的资源,将所生成的标记返回给 IIS 和请求客户端。




ASP.NET 之前,需要使用 ISAPI 筛选器来实现 IIS Web 服务器上的 URL 重写。由于 ASP.NET 引擎与 IIS
非常相似,因此可以使用 ASP.NET 进行 URL 重写。存在相似之处的原因在于 ASP.NET 引擎可以实现以下功能:

在处理请求时可以引发事件。

允许任意数量的 HTTP 模块处理所引发的事件,这与 IIS 的 ISAPI 筛选器相似。

将呈现被请求资源这项任务委托给 HTTP 处理程序,该处理程序与 IIS 的 ISAPI 扩展相似。

与 IIS 一样,ASP.NET 引擎在请求的有效期内将会触发事件,通过发信号来表示其处理过程从一个状态改变为了另一个状态。例如,当 ASP.NET 引擎首次响应请求时,BeginRequest事件将被触发。接下来触发的是AuthenticateRequest事件,该事件在已建立用户标识时出现。(此外,还有大量的其他事件:AuthorizeRequestResolveRequestCacheEndRequest,等等。这些事件属于System.Web.HttpApplication类;有关详细信息,请参阅位于以下网址的技术文档:HttpApplication Class Overview。)


如上一部分所讨论的,可以创建 ISAPI 筛选器以响应 IIS 引发的事件。同样,ASP.NET 提供了 HTTP 模块,该模块可以响应由
ASP.NET 引擎引发的事件。可以将 ASP.NET Web 应用程序配置为具有多个 HTTP 模块。对于由 ASP.NET
引擎处理的每个请求,将初始化每个已配置的 HTTP
模块,并允许将事件处理程序绑定到处理请求期间所引发的事件。请注意,对每个请求均使用了许多内置 HTTP 模块。其中的一个内置 HTTP 模块是FormsAuthenticationModule,该模块首先检查是否使用了窗体身份验证,如果使用,将检查是否对用户进行了身份验证。如果没有使用,会自动将用户重定向到指定的登录页面。


上所述,通过使用 IIS,传入请求将最终发送给 ISAPI 扩展,而 ISAPI 扩展的任务是返回特定请求的数据。例如,在请求传统的 ASP
网页时,IIS 将请求传递给 asp.dll ISAPI 扩展,该扩展的任务是返回被请求的 ASP 页面的 HTML 标记。ASP.NET
引擎使用相似的方法。初始化 HTTP 模块后,ASP.NET 引擎的下一项任务是确定应由哪个 HTTP 处理程序来处理请求。

所有通
过 ASP.NET 引擎传递的请求最终都将到达 HTTP 处理程序或 HTTP 处理程序工厂(HTTP 处理程序工厂仅返回 HTTP
处理程序的实例,然后使用该实例来处理请求)。最终的 HTTP 处理程序将返回响应,即呈现被请求的资源。此响应将被发送回 IIS,然后 IIS
将响应返回给提出请求的用户。

ASP.NET 包括许多内置的 HTTP 处理程序。例如,PageHandlerFactory用于呈现 ASP.NET 网页。WebServiceHandlerFactory用于呈现 ASP.NET Web 服务的响应 SOAP 信封。TraceHandler将向trace.axd呈现请求的 HTML 标记。


2 描述了如何处理对 ASP.NET 资源的请求。首先,IIS 接收到请求,并将请求调度给
aspnet_isapi.dll。接下来,ASP.NET 引擎对已配置的 HTTP 模块进行初始化。最后将调用正确的 HTTP
处理程序,并呈现被请求的资源,将所生成的标记返回给 IIS 和请求客户端。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐