3

一本书显示了一个示例,其中(使用 IIS7 时)配置了以下模块,以便它可以被运行在网站上的任何 Web 应用程序(甚至非 asp.net 应用程序)使用。但:

  1. 如果为非 asp.net 应用程序调用此模块,那么如何或为什么仍会创建 HttpApplication 对象,因为非 asp.net 应用程序不在 CLR 的上下文中运行(因此 Asp.Net 运行时也不会)不跑)?

  2. 假设HttpApplication对象也是为非 asp.net 应用程序创建的,那么为什么 Init() 事件处理程序中的代码必须检查HttpApplication对象是否实际存在?为什么它不存在?这不是 HttpApplication实际实例化 Http 模块实例的对象吗?

这是Http处理程序:

public class SimpleSqlLogging : IHttpModule
{
  private HttpApplication _CurrentApplication;

  public void Dispose()
  {
      _CurrentApplication = null;
  }

  public void Init(HttpApplication context)
  {
      // Attach to the incoming request event
      _CurrentApplication = context;

      if (context != null)
      {
          context.BeginRequest += new EventHandler(context_BeginRequest);
      }
  }

  void context_BeginRequest(object sender, EventArgs e)
  { ... }
}



4

2 回答 2

3

在 IIS7 中,使用集成管道运行的应用程序池中的应用程序始终是 .NET 应用程序。代码只是防御性的。

于 2009-03-31T19:06:02.020 回答
0

关于 HttpHander 的链接:http: //msdn.microsoft.com/en-us/magazine/cc188942.aspx

于 2010-03-23T04:37:21.183 回答