【问题标题】:When HttpModule Init method runs in ASP.NET Integrated mode?HttpModule Init 方法何时在 ASP.NET 集成模式下运行?
【发布时间】:2011-12-19 09:54:11
【问题描述】:

我编写了一个 HttpModule,它是一个 NHibernate 会话提供程序。它只是在 HttpModule 的 Init 方法中打开一个 SessionFactory,并在 BeginRequest 中获取一个新的 Session,并在 EndRequest 中将其关闭。另一方面,我在 Global.asax 中编写了一个方法,该方法使用来自这个名为 GetData 的 HttpModule 的会话。我在 Global.asax 的 Init 方法中运行该方法 (GetData)。问题是当我在集成模式下使用我的 HttpModule 时,我的 HttpModule 在运行 Global.asax 的 Init 方法之前似乎没有初始化。

我已经搜索了这些方法的运行顺序和事件的生命周期,但没有找到任何有用的东西!

【问题讨论】:

    标签: c# asp.net nhibernate iis-7 httpmodule


    【解决方案1】:

    在 IIS 7.x 中,模块和处理程序应在 web.config 文件中的 system.webServer xml 元素中注册。

    查看这篇 MSDN 文章:

    【讨论】:

    • 我知道。我使用这种语法在集成模式下注册模块。这不是问题。
    • @alisabzevari 然后检查 IIS 配置。无论如何,很难帮助您获取您的问题信息...
    【解决方案2】:

    ASP.NET 对何时调用 HttpModule Init() 方法不提供任何保证(与静态初始化程序不同)。一般来说,应该使用 Init() 方法来连接事件处理程序,任何“实际工作”都应该在事件处理程序中完成。

    在处理下一个事件之前,从所有 HttpModule (包括 Global.asax)调用特定事件的所有已注册事件处理程序——因此您可以通过这种方式控制顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 2010-11-11
      • 2021-11-06
      • 1970-01-01
      • 2018-09-09
      相关资源
      最近更新 更多