2010-07-24 24 views
0

我有过的HttpModule和HttpHandler的一些疑问,请帮我澄清的IHttpModule,IHttpHandler的.NET

1)的HttpModule我注意到初始化方法调用一次。 context_BeginRequest和context_EndRequest等方法调用每个请求。 是否保证对于一个模块,Init会针对不同的用户(或不同的请求)调用一次,并且BeginRequest等会每次为不同的用户(或不同的请求)调用?

2)是否有的Application_Start(global.asax中)可以运行超过一次,因为可能存在的任何可能性多于一个应用对象

3)由于应用对象可以是不同的(从应用程序池)在本大小写应用程序数据如何在不同用户之间共享

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

感谢 日图

回答

1

“是它保证了模块初始化将再次呼吁为不同的用户(或不同的要求)和的BeginRequest等会要求不同的用户每次(或不同的要求)?”

init方法会在应用程序池开始/当应用程序首次启动时调用。这是模块加载的时候。

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

“2)是否有的Application_Start(global.asax中)可以运行超过一次,因为可能存在多于一个的应用程序对象的任何可能性”

没有在一个特定的文件夹中的多个应用程序。 IIS不以那种方式工作。除非重置应用程序池,否则每个应用程序只有一个global.asax,Application_Start只会针对每个应用程序调用一次。

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

取决于你在哪里存储这些应用数据和您使用的是检索它的内容。我不确定你的意思。会话数据应该被限定为某个单独的应用(当然对于在进程的会话状态服务器,并且如果适当还配置用于处理外的会话状态服务器)

“4)在HttpHandler的ProcessRequest方法将要求每请求(或针对每个用户)“。

是的,但仅针对被映射到您的处理请求。相反,可以为所有请求调用HttpModule。

+0

感谢史蒂夫您reply.In 3)我的怀疑是有可能(从HttpApplication的工厂池)不同的应用对象为不同的用户假设我已经存储的应用[“钥匙”] =中的Application_Start,如果一些数据应用对象会改变为其他用户。如果是的话,其他用户能够获得这些价值如何? – Ritu 2010-07-25 07:14:42

+0

史蒂夫嗨,HTTP://www.dominicpettifer.co.uk/Blog/41/ihttpmodule-gotchas---the-init---method-can-get-called-multiple-times 按链接我们可以有多个初始化调用 – Ritu 2010-07-25 14:13:35