HttpHandler:
HttpHandler实现了ISAPI Extention的功能,他处理请求(Request)的信息和发送响应(Response)。HttpHandler功能的实现通过实现IHttpHandler接口来达到。
HTTP处理程序是实现了System.Web.IHttpHandler接口的.NET组件。任何实现了IHttpHandler接口的类都可以用于处理输入的HTTP请求。HTTP处理程序与ISAPI扩展有些类似。HTTP处理程序和ISAPI扩展的差别在于在URL中可以使用HTTP处理程序的文件名称直接调用它们,与ISAPI扩展类似。
HttpHandler的实现,实现我们的HTTP处理程序包含以下步骤:
编写一个实现IHttpHandler接口的类。
在web.config或machine.config文件中注册这个处理程序。
在Internet服务管理器中把文件扩展(你想要处理的文件扩展名)映射到ASP.NETISAPI扩展DLL(aspnet_isapi.dll)上。
我们来看一个例子,打开IIS服务器,属性,主目录下有个配置,里面你就可以找到你的程序所执行文件所要调用的.dll文件。我们可以看到.aspx就是C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll这个文件
来执行的。这里还可以添加你自己任意定义任意扩展名文件,定义了后你的服务器就可以认识这些人间,注意只是你的服务器,别人的不认识。这时候大家就会对网络上流行的各式各样的后缀名不奇怪了吧,可以自己定义的。
我们自己定义一个带.xxx后缀的。
然后再web.config里面配置相应节点:这里不懂的参考前边的,XXX就是我们刚才定义那个后缀名。
<httpHandlers>
<add verb="*" path="*.xxx"
type="MyHandler.NewHandler,MyHandler" />
</httpHandlers>
然后添加一个测试页面,就可以了。
HttpHandler之间的关系是这样的:
发送一个Http请求,然后判断是否存在自定义的HttpHandler,如果存在的话由自定义的HttpHandler处理Http请求,否则由系统默认的HttpHandler处理
Http请求。
在HttpHandler中访问Session:
不能直接通过HttpContext访问。
必须实现IRequiresSessionState接口。
IRequiresSessionState接口指定目标HTTP处理程序接口具有对会话状态值的读写访问权限。这是一个标记接口,没有任何方法。
然后配置Web.config的节点:
<httpHandlers>
<!--<add verb="*" path="*.xxx"
type="MyHandler.NewHandler,MyHandler" />-->
<add verb="*" path="*"
type="MyHandler.NewHandlerSession,MyHandlerSession" />
</httpHandlers>
这样就可以了。
这里还有一个定时器实现的例子。
ASP.NET事件模型机制:
ASP.NET之所以对于以前的ASP是一个革命性的巨变,在很大程度上是由于ASP.NET技术是一种完全基于事件驱动的全新技术。
在ASP.NET中事件的触发和处理分别是在客户端和服务器段进行的。
ASP.NET中,如果频繁和服务器进行事件信息的传递,会大大降低服务器的处理效率和性能,因而有些事件如OnMouseOver没有提供。
但提供了Change事件。为了提高效率它们被缓存在客户端。等到再一次事件信息被发送到服务器端时一同发送回去。