ASP.NET中的HTTP模块和处理程序
2008-02-22 09:29:05来源:互联网 阅读 ()
介绍
在Internet时代的开端,客户端的需求非常有限;.htm文件就可以满足他们的需求。但是,随着时间的流逝,客户端需求的扩充超越了.htm文件或静态文件所包含的功能。
开发者需要扩充或扩展Web服务器的功能。Web服务器厂商设计了不同的解决方案,但是都遵循同一个主题“向Web服务器插入某些组件”。所有的Web服务器补充技术都允许开发者建立并插入组件以增强Web服务器的功能。微软公司提出了ISAPI(Internet服务器API),网景公司提出了NSAPI(网景服务器API)等等。
ISAPI是一种重要的技术,它允许我们增强与ISAPI兼容的Web服务器(IIS就是一种与ISAPI兼容的Web服务器)的能力。我们使用下面的组件达到这个目的:
· ISAPI扩展
· ISAPI过滤器
ISAPI扩展是使用Win32动态链接库来实现的。你可以把ISAPI扩展看作是一个普通的应用程序。ISAPI扩展的处理目标是http请求。这意味着你必须调用它们才能激活它们。 你可以认为ISAPI过滤器仅仅就是一个过滤器而已。客户端每次向服务器发出请求的时候,请求要经过过滤器。客户端不需要在请求中指定过滤器,只需要简单地把请求发送给Web服务器,接着Web服务器把请求传递给相关的过滤器。接下来过滤器可能修改请求,执行某些登录操作等等。
由于这些组件的复杂性,实现它们非常困难。开发者不得不使用C/C 来开发这些组件,但是对于很多人来说,使用C/C 进行开发简直就是痛苦的代名词。
那么ASP.NET提供什么东西来实现这些功能呢?ASP.NET提供的是HttpHandler(HTTP处理程序)和HttpModule(HTTP模块)。
在深入了解这些组件的详细信息之前,了解一下http请求经过HTTP模块和HTTP处理程序的时候的处理流程是有价值的。
建立示例应用程序
我建立了下面一些的C#项目以演示应用程序的不同组件:
· NewHandler (HTTP处理程序)
· Webapp (演示HTTP处理程序)
· SecurityModules (HTTP模块)
· Webapp2 (演示HTTP模块)
这些应用程序的安装步骤:
· 解开attached zip文件中的所以代码。
· 建立两个虚拟目录webapp和webapp2;把这两个目录指向Webapp和Webapp2应用程序的实际物理目录。
· 把NewHandler项目中的Newhandler.dll文件复制到webapp应用程序的bin目录。
· 把SecurityModules项目中的SecurityModules.dll文件复制到webapp2应用程序的bin目录中。
ASP.NET请求的处理过程
ASP.NET请求处理过程是基于管道模型的,在模型中ASP.NET把http请求传递给管道中的所有模块。每个模块都接收http请求并有完全控制权限。模块可以用任何自认为适合的方式来处理请求。一旦请求经过了所有HTTP模块,就最终被HTTP处理程序处理。HTTP处理程序对请求进行一些处理,并且结果将再次经过管道中的HTTP模块:
请注意在http请求的处理过程中,只能调用一个HTTP处理程序,然而可以调用多个HTTP模块。
Http处理程序
HTTP处理程序是实现了System.Web.IHttpHandler接口的.NET组件。任何实现了IHttpHandler接口的类都可以用于处理输入的HTTP请求。HTTP处理程序与ISAPI扩展有些类似。HTTP处理程序和ISAPI扩展的差别在于在URL中可以使用HTTP处理程序的文件名称直接调用它们,与ISAPI扩展类似。
HTTP处理程序实现了下列方法:
方法名称 | 描述 |
ProcessRequest | 这个方法实际上是http处理程序的核心。我们调用这个方法来处理http请求。 |
IsReusable | 我们调用这个属性来决定http处理程序的实例是否可以用于处理相同其它类型的请求。HTTP处理程序可以返回true或false来表明它们是否可以重复使用。 |
你可以使用web.config或者machine.config文件把这些类映射到http请求上。映射完成以后,当接收到相应请求的时候ASP.NET会实例化http处理程序。我们将解释如何在web.config和/或machine.config文件中定义所有这些细节信息。
ASP.NET还通过IHttpHandlerFactory接口支持http处理程序的扩展。ASP.NET提供了把http请求路由到实现IHttpHandlerFactory接口的类的对象上的能力。此外,ASP.NET还利用了Factory设计模式。这种模式为建立一组相关对象而不提供具体类的功能提供了接口。简单的说,你可以把用于建立依赖传递进来的参数建立的http处理程序对象的类看作是factory(工厂)。我们不用指定需要实例化的特定的http处理程序;http处理程序工厂处理这种事务。这样做的优点在于如果未来实现IHttpHandler接口的对象的实现方法发生了改变,只要接口仍然相同,客户端就不会受到影响。
下面是IHttpHandlerFactory接口中的方法列表:
方法名称 | 描述 |
GetHandler | 这个方法负责建立适当的处理程序并把它的指针返回到调用代码(ASP.NET运行时)。这个方法返回的处理程序对象应该实现了IHttpHandler接口。 |
ReleaseHandler | 这个方法负责在请求处理完成后释放http处理程序。Factory 实现决定了它的操作。Factory 实现可以是实际摧毁实例,也可以把它放入缓冲池供以后使用。 |
在配置文件中注册HTTP处理程序和HTTP处理程序工厂
ASP.NET在下面的配置文件中维护自己的配置信息:
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash