今天帮同学解答一个问题的时候,涉及到一般处理程序(末尾的链接讲了IHttpHandler 管道处理)了,之前在大三的时候接触过,以后再也没有接触过;现在做个笔记总价一下;
在一般处理程序里,有个IsReusable,百度翻译:可重用的
IsResuable属性指示是否可以重用于其他IHttpHandler实例;
如果设置为true,能提高性能,但要注意线程之间安全性问题 ;如果设置为false,则线程是安全的
一般情况下,都会设置成false,虽然不是性能最优,但是最安全(反正就是设置为false,就是保证安全之类的;)
1 public bool IsReusable 2 { 3 get 4 { 5 return false; 6 } 7 }
当我们打开一个网页的时候,不管请求的是静态的还是动态的资源,IIS会根据ISAPI(微软和Process软件公司联合提出的Web服务器上的API标准)这一标准,将请求的文件根据文件后缀名的不同,转 交给不同的处理程序。打开IIS可以看到,大部分文件都交给了aspnet_isapi.dll进行处理,但是aspnet_isapi.dll不可能对 所有文件都进行一样方式的处理。
为了了解aspnet_isapi.dll如何进行进一步处理的,我们可以打开C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Web.config文件。可以看到,在<httpHandler>节点中将不同的文件类型映射给不同的handler去处理;
一般的html文件请求后台可以请求一般处理程序;
一般处理程序的启动函数是:
1 namespace WebApplication1 2 { 3 /// <summary> 4 /// 通常是实现IHttpHandler接口,因为不必继承自Page类, 5 /// 所以没有那么多事件需要处理,不必消耗太多资源,所以性能方面要比aspx高 6 /// </summary> 7 public class Handler1 : IHttpHandler 8 { 9 10 //ProcessRequest这个方法虽然是无返回值,但是我们可以通过context.Response.Write("字符串类型")向外输入数据 11 //还有就是这个方法,就是程序的‘主函数’,程序的运行从这里开启; 12 public void ProcessRequest(HttpContext context) 13 { 14 context.Response.ContentType = "text/plain"; 15 16 context.Response.Write("Hello World"); 17 } 18 19 public bool IsReusable 20 { 21 get 22 { 23 return false; 24 } 25 } 26 } 27 }