给定一个以集成模式运行的应用程序池,该应用程序池能够为“托管处理程序请求”(获取一个aspx页面)以及“非托管处理程序请求”(获取一个jpg文件)提供服务。
在处理MHR请求时,应用程序池应考虑所有模块,但对于非MHR,不应考虑使用托管Handler先决条件标记的模块。
应用程序是否有两个不同的HttpAplication管道(一个用于MHR,另一个用于非MHR)?或者,他只有一个管道,并且能够根据请求决定引发哪个httpAplication事件处理程序?
我想,在httpApplication启动BeginRequest之前,应用程序池将决定请求是否被管理。至少在AuthenticateRequest之前。是那么回事吗?
链接中的
响应:
IIS提供的所有资源都映射到配置中的处理程序。如果配置映射不存在,则对资源的请求将收到404 HTTP状态。除了在管道开始之前进行的配置映射之外,处理程序映射还可以在请求执行过程中更改.
模块的Init函数只执行一次(可能在应用程序池启动时),而不依赖于托管的Handler前提条件?
我想apppool并没有为每个请求创建整个管道(注册httpaplication等等)。
提前谢谢你,
UPDATE1:在阅读了链接之后,我仍然“看到”两个不同的管道给出了一个应用程序池。对于不同的管道,我指的是在IIS管道中注册的两组不同的事件处理程序:
BEGIN_REQUEST
AUTHENTICATE_REQUEST
AUTHORIZE_REQUEST
RESOLVE_REQUEST_CACHE
MAP_REQUEST_HANDLER
ACQUIRE_REQUEST_STATE
PRE_EXECUTE_REQUEST_HANDLER
EXECUTE_REQUEST_HANDLER
RELEASE_REQUEST_STATE
UPDATE_REQUEST_CACHE
LOG_REQUEST
END_REQUEST当集成模式下的应用程序池启动时,它可以查找模块部分并执行每个模块的Init功能(独立于先决条件设置)。每个模块的Init函数在某些IIS管道阶段注册自己。但是在运行时,当处理非托管请求时,应该跳过带有预处理托管处理程序的模块的事件处理程序。怎么能做到呢?
UPDATE2:据我所知,应用程序池( windows进程)承载ASP.Net运行时(httpRuntime in System.Web?)。此运行库包含一个httpApplication对象池。当应用程序池启动(或者直到第一个请求到达)时,会实例化几个httpApplications。此时调用httpModules的Init方法(在web.config中的模块下)。在IIS7集成模式出现之前,我认为所有的httpApplication对象都是克隆的,但是由于根据处理程序的请求类型(托管或非托管),应该考虑或不考虑某些httpModules,所以我推断httpRutime包含两个httpApplication池,或者可能给定的httpApplication对象只能处理托管处理程序请求或非托管哈德勒请求,而不是这两个.
发布于 2011-08-12 23:10:21
在这里,您可以看到IIS只有一个管道。服务asp.net请求的“经典”方法始于IIS管道的EXECUTE_REQUEST_HANDLER事件。将经典模式下的ASP.NET视为IIS管道中的管道。
使用集成模式,您基本上可以在IIS管道系列事件中插入托管代码,例如将asp.net窗体身份验证添加到.jpg之类的静态文件中。
https://stackoverflow.com/questions/7047156
复制相似问题