0

我对 HttpModule 和 HttpHandler 有一些疑问请帮我澄清一下

1)在 HttpModule 我注意到方法 Init 只调用了一次。context_BeginRequest 和 context_EndRequest 等方法调用每个请求。是否保证模块 Init 将为不同的用户(或不同的请求)调用一次,而 BeginRequest 等每次都会为不同的用户(或不同的请求)调用?

2) Application_Start(global.asax) 是否有可能运行不止一次,因为可能有多个应用程序对象

3)由于应用程序对象可以不同(来自应用程序池)在这种情况下,不同用户之间如何共享应用程序数据?

4) 在 HttpHandler ProcessRequest 方法将调用每个请求(或每个用户)。

谢谢瑞图

4

1 回答 1

1

“是否保证模块 Init 会为不同的用户(或不同的请求)调用一次,而 BeginRequest 等每次都会为不同的用户(或不同的请求)调用?”

init 方法将在应用程序池启动/应用程序首次启动时调用。这是加载模块的时间。

每次应用程序开始处理新的 HTTP 请求时都会调用 BeginRequest 方法。

“2)Application_Start(global.asax)是否有可能运行不止一次,因为可能有多个应用程序对象”

特定文件夹中的应用程序不超过一个。IIS 不能那样工作。每个应用程序只有一个 global.asax,除非应用程序池被重置,否则每个应用程序只会调用一次 Application_Start。

“3)由于应用程序对象可以不同(来自应用程序池)在这种情况下,不同用户之间如何共享应用程序数据?”

取决于您存储此应用程序数据的位置以及您使用什么来检索它。我不确定你的意思是什么。会话数据应限定为单个应用程序(当然对于进程内会话状态服务器,如果正确配置也适用于进程外会话状态服务器)

"4) 在 HttpHandler 中,ProcessRequest 方法会为每个请求(或每个用户)调用。

是的,但仅适用于映射到您的处理程序的请求。相反,可以为所有请求调用 HttpModule。

于 2010-07-24T20:33:15.880 回答