【问题标题】:Ihttpmodule ,Ihttphandler .NETIhttpmodule ,Ihttphandler .NET
【发布时间】:2010-07-24 20:23:29
【问题描述】:

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

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

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

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

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

谢谢 丽图

【问题讨论】:

    标签: asp.net httpmodule ihttphandler


    【解决方案1】:

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

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

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

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

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

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

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

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

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

    【讨论】:

    • 感谢史蒂夫的回复。在 3)我的疑问是,不同的用户可能有不同的应用程序对象(来自 HttpApplication 工厂池)假设我已经存储了 Application["Key"]= some data in Application_Start 以及应用程序对象是否会为其他用户更改。如果是,其他用户是否能够获得这些值?
    • 嗨史蒂夫,dominicpettifer.co.uk/Blog/41/… 根据链接我们可以有多个初始化调用
    猜你喜欢
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    相关资源
    最近更新 更多