aspx与ashx

      一直想好好写几篇文章,总是觉得自己浅显的文字在那些我也看不大懂的大牛精彩文章面前显得微不足道,所以就一直没写了。暑假就要出去找工作了,现在还是把基础复习一下,把遇到的一些小问题写下来,也许可以帮到刚刚学习dot net的朋友吧。(ps:想写几篇asp.net SEO优化和dot net加密与反编译的文章,希望有朋友支持哦!)

     前几天,有个朋友在写验证码时处理session(他用的Asp.net一般处理程序)遇到了一点问题,向我咨询,我就给他讲解了一下,顺便自己记录了下来,也许以后还会有初学者遇到吧。

      Asp.net web(即aspx页面)是由System.Web.UI.Page派生的类表示,示例:public partial class UserCenter : System.Web.UI.Page

包含了web页面的全部功能,比如我们经常使用到的控件,包括用户控件,以及master page等都来自于page,功能十分强大

     Asp.net一般处理程序(即ashx文件)IHttpHandler接口派生而来。接口本身没有任何功能,只是声明了一系列成员,有接口派生类来实现,示例:

public class checkmail : IHttpHandler

     很显然,ashx文件不需要page那么大的开销,功能也有一定的限制,但是在完成我常用的基本的任务时(用用户名检测,验证码等),他的效率就明显地比aspx页面高了。这里要提到几点,也许我们该注意下,创建一个一般处理程序时IHttpHandler的两个成员值得我们注意ProcessRequest ()bool IsReusable显然,前者在加载一般处理程序时执行,至于后者嘛,布尔属性判断该程序是否可被其他请求重用。

    好了,前面简单介绍了一下,下面回到当时帮解决的问题吧,他意识到了用一般处理程序生成验证码效率会比web窗体高,所以选用了一般处理程序。但是在处理session时,却总是遇到了问题。把代码给我看,我笑了下,却也没说什么。就象我前面所说的,一般程序有IHttpHandler接口派生而来,其本身却无法初始化session,所以他前面一直报错。帮他添加了一个命名空间System.Web.SessionState,再添加了一个派生接口IRequiresSessionState 他很惊奇,郁闷了他一天的问题一下解决了,希望以后看到这里时不再郁闷我就满意了。

    下面把当时我帮他修改的文件也贴出来,一个简单的验证码生成文件。VadidateCode.rar

posted @ 2009-06-13 13:30  vistang  阅读(1613)  评论(0编辑  收藏  举报