摘要: 最近花了二个月的业余时间重写了我以前的通用数据访问层,由于是重写,所以我给这个项目取了个新名字:ClownFish如果需要了解ClownFish的使用方法,请点击ClownFish 使用说明ClownFish是什么?ClownFish 是我编写的一个通用数据访问层,设计它的目的是为了:1. 方便在 .net 项目中执行数据访问任务。2. 避免直接使用ADO.NET带来的一大堆高度类似的繁琐代码。3. 提供出色的性能满足实际项目需要。ClownFish 具有以下一些技术特色:1. 高性能:比手写代码还快的执行速度。2. 简单:执行查询、将查询结果转成实体列表、获取输出参数。 一个调用完成三个步骤 阅读全文
posted @ 2012-07-17 08:26 Fish Li 阅读(69010) 评论(318) 推荐(633) 编辑
 
摘要: 写了几篇细说之后,今天打算换换口味,还是来写代码吧。所以,这次博客将以实际的代码来展示在ASP.NET平台上开发自己的框架,我希望也能让您发现这并不是件难事。我在前面的博客【用Asp.net写自己的服务框架】中,发布了一个用ASP.NET写的服务框架,那个框架我目前仍在使用中。近来,由于时常也会有人问我一些关于ASP.NET MVC的话题,因此,就想再写个自己的MVC框架出来,一方面可以留给自己使用,另外也可以谈谈MVC,尤其可以展示一下在ASP.NET下写框架的乐趣。我之所以将写框架看成是件有乐趣的事,是因为:在写框架的过程中会接触许多的技术细节。比如:1. 为了支持Session需要了解管 阅读全文
posted @ 2012-02-12 22:13 Fish Li 阅读(153651) 评论(193) 推荐(899) 编辑
  2013年6月16日
摘要: 对于一个需要长期维护的网站来说,如何让网站长久稳定运行是件很有意义的事情。有些在开发阶段没有暴露的问题很有可能就在运维阶段出现了,这也是很正常的。还有些时候,我们希望不断地优化网站,让网站更快速的响应用户请求,这些事情都发生在开发之后的运维阶段。与开发阶段不同的,运维阶段不可能让你去调试程序,发现各类问题,我们只能通过各种系统日志来分析网站的运行状况,对于部署在IIS上的网站来说,IIS日志提供了最有价值的信息,我们可以通过它来分析网站的响应情况,来判断网站是否有性能问题,或者存在哪些需要改进的地方。IIS日志包含了哪些信息我前面说到【IIS日志提供了最有价值的信息】,这些信息有哪些呢?看看这 阅读全文
posted @ 2013-06-16 21:29 Fish Li 阅读(86620) 评论(88) 推荐(319) 编辑
  2013年5月28日
摘要: 前段时间碰到一个问题:为什么在ASP.NET程序中定时器有时候会不工作?这个问题看起来很奇怪,代码好像也没错,但就是结果与预期不一致。其实这里是ASP.NET应用程序中一个容易被忽略的经节。后来想想,类似这样的细节问题何止这一个,我今天就把我能想到的容易被忽视的细节问题都写出来,希望大家小心这些问题。想到我以前的博客中也零散的说过了一些,所以这篇博客中也把它们列出来了,不过,对于以前谈过的内容,这里将只会简略地说明。HttpContext.Current并非无处不在这个问题是我上个月的博客中提到的问题,原文链接:http://www.cnblogs.com/fish-li/archive/20 阅读全文
posted @ 2013-05-28 21:40 Fish Li 阅读(26798) 评论(156) 推荐(207) 编辑
  2013年5月5日
摘要: XML是一种很常见的数据保存方式,我经常用它来保存一些数据,或者是一些配置参数。使用C#,我们可以借助.net framework提供的很多API来读取或者创建修改这些XML,然而,不同人使用XML的方法很有可能并不相同。今天我打算谈谈我使用XML的一些方法,供大家参考。最简单的使用XML的方法由于.net framework针对XML提供了很多API,这些API根据不同的使用场景实现了不同层次的封装,比如,我们可以直接使用XmlTextReader、XmlDocument、XPath来取数XML中的数据,也可以使用LINQ TO XML或者反序列化的方法从XML中读取数据。那么,使用哪种方法 阅读全文
posted @ 2013-05-05 22:45 Fish Li 阅读(63052) 评论(185) 推荐(490) 编辑
  2013年4月6日
摘要: 了解ASP.NET的开发人员都知道它有个非常强大的对象 HttpContext,而且为了方便,ASP.NET还为它提供了一个静态属性HttpContext.Current来访问它,今天的博客打算就从HttpContext.Current说起。无处不在的HttpContext由于ASP.NET提供了静态属性HttpContext.Current,因此获取HttpContext对象就非常方便了。也正是因为这个原因,所以我们经常能见到直接访问HttpContext.Current的代码:public class Class1{ public Class1() { strin... 阅读全文
posted @ 2013-04-06 21:00 Fish Li 阅读(78022) 评论(120) 推荐(422) 编辑
  2013年3月24日
摘要: 每个程序都需要初始化的过程,用来读取配置或者设置一些运行环境(变量),对于ASP.NET程序来说,又该在哪里执行初始化的任务呢?我想应该绝大多数人都知道在Global.asax中执行初始化的过程,然而有些细节是我们需要关注的。本文用例在这篇博客的示例代码中,AppInitializer包含了网站的初始化的实现代码:public static class AppInitializer{ public static ConnectionStringSettings MyNorthwindConnectionSetting { get; private set; } public sta... 阅读全文
posted @ 2013-03-24 22:11 Fish Li 阅读(20452) 评论(57) 推荐(123) 编辑
  2013年3月12日
摘要: 不知不觉中,来博客园写博已经二年了。经过二年时间的积累,人气提高了许多,或许正因为这个原因,最近一年中经常会收到一些朋友的提问。在所有的提问中,有些问题被多次问过了,还有部分问题是没有结果的。对于一些没有结果的问题,Fish Li也表示遗憾。趁着3月12日这个对于我来说特殊的日子里,我也想谈谈另一个问题:Fish Li 该如何帮助您呢?下面我将对一些无结果的问题再次给予回答,虽然今天可能还是没有答案,但我要告诉您没有答案的原因。如何提问?不管是网上,还是周围的同事,我发现有人喜欢在反馈错误时,只说二个字:报错!说实话,您也太不专业了!您想想人家根据“报错”二个字,就能找到报错的原因吗?还有些人 阅读全文
posted @ 2013-03-12 08:48 Fish Li 阅读(24294) 评论(207) 推荐(429) 编辑
  2013年3月3日
摘要: 在前二篇博客中,我分别介绍了二种优化反射的方法:1. Delegate:委托。2. CodeDOM:动态代码生成。这是二种截然不同的方法,性能的差距也很大。今天的博客将着重比较它们的优缺点,以及给出它们的使用建议。用Delegate优化反射的缺点在评价委托方案时,我认为有必要细分一下委托方案:1. 强类型委托,例如:Action<TTarget, TValue>2. 弱类型委托,例如:Action<object, object>它们的优点分别是:强类型委托:速度快,已经最接近直接调用的性能,然而它的缺点是 不通用。弱类型委托:比较通用,且经过一些代码封装后,使用方便,但 阅读全文
posted @ 2013-03-03 21:11 Fish Li 阅读(17805) 评论(37) 推荐(65) 编辑
  2013年2月24日
摘要: 问题回顾在上篇博客中,我介绍了优化反射的第一个步骤:用委托调用代替直接反射调用。然而,那只是反射优化过程的开始,因为新的问题出现了:如何保存大量的委托?如果我们将委托保存在字典集合中,会发现这种设计会浪费较多的执行时间,因为这种设计会引发三个新问题:1. 代码的执行路径变长了。2. 字典查找是有成本开销的。3. 字典集合的并发读写需要锁定,会影响并发性。再来回顾一下上次的测试结果吧:虽然通用接口ISetValue将反射性能优化了37倍,但是最终的FastSetValue将这个数字减少到还不到7倍(在CLR4中还不到5倍)。难道您不觉得遗憾吗?再看看直接调用与反射调用的对比,它们的速度相差了上千 阅读全文
posted @ 2013-02-24 21:03 Fish Li 阅读(18486) 评论(50) 推荐(64) 编辑
  2013年2月18日
摘要: 反射是一种很重要的技术,然而它与直接调用相比性能要慢很多,因此如何优化反射性能也就成为一个不得不面对的问题。目前最常见的优化反射性能的方法就是采用委托:用委托的方式调用需要反射调用的方法(或者属性、字段)。那么如何得到委托呢? 目前最常见也就是二种方法:Emit, ExpressionTree 。其中ExpressionTree可认为是Emit方法的简化版本,所以Emit是最根本的方法,它采用在运行时动态构造一段IL代码来包装需要反射调用的代码,这段动态生成的代码满足某个委托的签名,因此最后可以采用委托的方式代替反射调用。用Emit方法优化反射如果我们需要设计自己的数据访问层,那么就需要动态创 阅读全文
posted @ 2013-02-18 21:32 Fish Li 阅读(41069) 评论(114) 推荐(203) 编辑
  2013年1月13日
摘要: AJAX技术经过这么多年的发展,出现了一些框架或类库用于简化开发工作,不同的框架类库的使用方法也各不相同。现在,再回头看看这些技术,看看这些框架类库,我们能感受到技术在不断地发展,AJAX开发越来越容易了。本文收集了在ASP.NET平台上,一些具体代表性的AJAX开发方法,我将用实际的示例代码来演示如何使用它们,让您感受AJAX的进化历程,同时也希望将一些优秀的AJAX开发方法介绍给您。为了方便地介绍这些AJAX开发方法,我将它们划分为四代技术。注意:按代划分AJAX技术纯属我个人的观点,只为了更好了区分它们。此外,一些不借助任何框架类库的原始AJAX开发方法,本文将不讨论它们。第一代技术:生 阅读全文
posted @ 2013-01-13 20:59 Fish Li 阅读(37351) 评论(129) 推荐(336) 编辑
  2013年1月4日
摘要: 最近收到几个疑问:HttpHandler和HttpModule之间有什么差别,我到底该选择哪个?之所以有这个疑问,是因为在这二类对象中都可以访问Request, Response对象,都能处理请求。我原以为在博客 用Asp.net写自己的服务框架中做了那么多的演示应该把它们的使用方法说清楚了,然而有些人看了我的那些示例,仍然不知道该如何选择它们,为了实现同一个目标,我既用了HttpHandler,也有用HttpModule。现在看来,我当时设计的那些示例并不是讲清楚HttpHandler和HttpModule之间有什么差别,而是在演示如何利用HttpHandler和HttpModule设计一个 阅读全文
posted @ 2013-01-04 21:57 Fish Li 阅读(42030) 评论(127) 推荐(438) 编辑
  2012年12月23日
摘要: 本文将介绍一些方法用于优化ASP.NET网站性能,这些方法都是不需要修改程序代码的。它们主要分为二个方面:1. 利用ASP.NET自身的扩展性进行优化。2. 优化IIS设置。配置OutputCache用缓存来优化网站性能的方法,估计是无人不知的。ASP.NET提供了HttpRuntime.Cache对象来缓存数据,也提供了OutputCache指令来缓存整个页面输出。虽然OutputCache指令使用起来更方便,也有非常好的效果,不过,它需要我们在那些页面中添加这样一个指令。对于设置过OutputCache的页面来说,浏览器在收到这类页面的响应后,会将页面响应内容缓存起来。只要在指定的缓存时间 阅读全文
posted @ 2012-12-23 21:27 Fish Li 阅读(24905) 评论(76) 推荐(244) 编辑
  2012年11月21日
摘要: 由于HTTP协议的无状态特性,导致在ASP.NET编程中,每个请求都会在服务端从头到执行一次管线过程,对于ASP.NET页面来说,Page对象都会重新创建,所有控件以及内容都会重新生成,因此,如果希望上一次的页面状态能够在后续页面中保留,则必需引入状态管理功能。ASP.NET为了实现状态管理功能,提供了8种方法,可帮助我们在页面之间或者整个用户会话期间保留状态数据。这些方法分为二类:视图状态、控件状态、隐藏域、Cookie 和查询字符串会以不同方式将数据发送到客户端上。而应用程序状态、会话状态和配置文件属性(Profile)则会将数据存储到服务端。虽然每种方法都有不同的优点和缺点,对于小的项目 阅读全文
posted @ 2012-11-21 08:32 Fish Li 阅读(17336) 评论(87) 推荐(187) 编辑
  2012年11月5日
摘要: 在软件开发过程中,写出影响性能或者有BUG的代码,都是我们无法回避的现实问题。不过,如果能够在程序发布前(自测或者测试阶段)将这些问题找出来,我想大家都是可接受的。今天就来介绍一种方法,用来发现在网站开发过程中,容易被我们忽略的一些问题,而这些问题其实是容易被发现的。将要介绍的方法需要使用Fiddler这样一款工具,我将演示如何使用Fiddler来发现404错误,以及较大的响应输出问题。我认为这二个问题实在太低级了,所以我设计了这个方法,并写了这篇博客,希望大家能喜欢。我发现,许多人对于这二类问题(404错误和较大的响应输出)都很不在意,好像它们根本不会对一个网站有任何影响似的。难道真是这样吗 阅读全文
posted @ 2012-11-05 08:54 Fish Li 阅读(9465) 评论(35) 推荐(93) 编辑
  2012年10月14日
摘要: 经常发现有人被乱码困扰着,而我感觉比较幸运,很少为此烦恼过。在这篇博客中,我将把我想到的一些与乱码有关的经验总结出来,供大家参考。页面显示乱码问题在一个网站中,有些页面会正常显示,然而,有些页面会显示成乱码。如果发生这种情况,可以检查一下web.config和文件编码。如果web.config是这样配置的:<globalization fileEncoding="utf-8" />而文件的编码不是UTF-8:那么就会有乱码问题。注意:反之是不是会出现乱码的。1. 不设置fileEncoding,此时不会有乱码现象。2. fileEncoding="gb 阅读全文
posted @ 2012-10-14 23:26 Fish Li 阅读(77025) 评论(99) 推荐(269) 编辑
  2012年10月3日
摘要: ClownFish 是什么?ClownFish 能做什么?ClownFish 有什么特色?如果您有这些疑问,那么请浏览ClownFish的介绍博客:ClownFish:比手写代码还快的通用数据访问层ClownFish适合我吗?我认为,对于数据库的访问方式目前有以下5种方案:1. 有些人喜欢使用存储过程。2. 有些人不喜欢存储过程也不喜欢把SQL语句放在C#代码中。3. 有些人会在C#中嵌入参数化的SQL语句。4. 有些人就是喜欢在C#代码中拼接SQL语句。5. 还有些人不写SQL语句而在使用ORM工具。当然了,还有些人同时混合使用多种方案。我不知道您属于哪一类,如果是最后一类,那么我只能说:C 阅读全文
posted @ 2012-10-03 20:14 Fish Li 阅读(21171) 评论(56) 推荐(117) 编辑
  2012年10月2日
摘要: 国庆节这二天一直在为我的ClownFish写《使用说明》。偶乐闲得无聊,打开了我的网易邮箱,发现有一封未读邮件:恭喜您成为 2012 年度 Microsoft MVP !哈哈,总算评上了。上次(7月份)没被评上,当时非常失望。经过周围朋友的劝告,于是鼓足勇气,决定再试一次,最后试一次,而且MVP申请表也写简单了,也不翻译成英语了,也不找博客园推荐,直接发给微软,总之,无所谓了,不抱有希望了。因为我认为:期望越高,失望越大。就像我老婆说的:你写博客本来就不是为了拿MVP,评不上算了。真没想到这次还成功了。今天看到这封邮件,真是意外。当时(7月6日)发完邮件收到确认后,直到10月1日前,一点消息也 阅读全文
posted @ 2012-10-02 15:45 Fish Li 阅读(8265) 评论(68) 推荐(75) 编辑
  2012年9月10日
摘要: 我一直都不喜欢在访问数据库时采用拼接SQL的方法,原因有以下几点:1. 不安全:有被SQL注入的风险。2. 可能会影响性能:每条SQL语句都需要数据库引擎执行[语句分析]之类的开销。3. 影响代码的可维护性:SQL语句与C#混在一起,想修改SQL就得重新编译程序,而且二种代码混在一起,可读性也不好。所以我通常会选择【参数化SQL】的方法去实现数据库的访问过程,而且会将SQL语句与项目代码(C#)分离开。不过,有些人可能会说:我的业务逻辑很复杂,Where中的过虑条件不可能事先确定,因此不拼接SQL还不行。看到这些缺点,ORM用户可能会认为:使用ORM工具就是终极的解决方案。是的,的确ORM可以 阅读全文
posted @ 2012-09-10 08:39 Fish Li 阅读(19997) 评论(96) 推荐(121) 编辑
  2012年8月19日
摘要: 说明:本文的第一版由于反对人数较多(推荐/反对数量是:23 / 17),我在8月20日删除了博文内容,只留下一段简单的内容。既然分享技术也引来这么多的反对,那我就不分享了。如果希望知道我的优化方法,请回复留下email地址。但是让我万万没有想到的是:到10月17日为止,内容没有了,推荐数量还翻了一倍。为了表示对所有点过【推荐】的朋友表示感谢,我决定重写本文。在此,尤其要感谢那些 在没有博文的情况下仍然愿意点击推荐 的朋友,真心谢谢你们的支持。我的每篇博文后面都会说:我的写作热情也离不开您的肯定支持。,所以,是你们重新给了我重写本文的热情。本文的第一版,说了过多的理论内容。在我阅读一些人的评论后 阅读全文
posted @ 2012-08-19 21:24 Fish Li 阅读(11944) 评论(129) 推荐(189) 编辑
  2012年6月10日
摘要: Page,我想每个ASP.NET开发人员对它应该都是比较熟悉的。这次的博客我就打算专门谈谈它。不过呢,我不打算说 在Page中使用控件的一些话题,也不会说Page的生命周期的相关话题,因为我认为这些话题被人谈论的次数实在是太多了,尤其是市面上的ASP.NET的书籍,都会比较喜欢这些话题。我不喜欢重复,因此今天我只想谈些人家不谈的那点事,但我认为它们仍然很重要。一些重要的Page指令虽然Page公开了很多属性,让我们可以在运行时调整它的状态与行为,但是,还有些重要的参数却是以“指令”方式提供的,需要在设计时就指定。下面是我整理的一些我认为 比较重要并且经常需要使用 的指令:@ Page 指令As 阅读全文
posted @ 2012-06-10 17:01 Fish Li 阅读(33633) 评论(106) 推荐(292) 编辑
  2012年5月7日
摘要: 上篇博客我谈到了一些关于ASP.NET Forms身份认证方面的话题,这次的博客将主要介绍ASP.NET Windows身份认证。Forms身份认证虽然使用广泛,不过,如果是在 Windows Active Directory 的环境中使用ASP.NET,那么使用Windows身份认证也会比较方便。方便性表现为:我们不用再设计登录页面,不用编写登录验证逻辑。而且使用Windows身份认证会有更好的安全保障。认识ASP.NET Windows身份认证要使用Windows身份认证模式,需要在web.config设置:<authentication mode="Windows&quo 阅读全文
posted @ 2012-05-07 08:27 Fish Li 阅读(80659) 评论(106) 推荐(228) 编辑
  2012年4月15日
摘要: 用户登录是个很常见的业务需求,在ASP.NET中,这个过程被称为身份认证。由于很常见,因此,我认为把这块内容整理出来,与大家分享应该是件有意义的事。在开发ASP.NET项目中,我们最常用的是Forms认证,也叫【表单认证】。这种认证方式既可以用于局域网环境,也可用于互联网环境,因此,它有着非常广泛的使用。这篇博客主要讨论的话题是:ASP.NET Forms 身份认证。有一点我要申明一下:在这篇博客中,不会涉及ASP.NET的登录系列控件以及membership的相关话题,我只想用比较原始的方式来说明在ASP.NET中是如何实现身份认证的过程。ASP.NET身份认证基础在开始今天的博客之前,我想 阅读全文
posted @ 2012-04-15 19:59 Fish Li 阅读(132311) 评论(249) 推荐(679) 编辑
  2012年3月12日
摘要: 2011-03-12开博,今天2012-03-12,整整写了一年的博客,今天决定写个总结。这篇总结为分四个部分:1. 博客索引:谈谈技术,给博客做个索引。2. 回顾经历:讲述我的写博历程。3. 博客定位:公开我的博客风格以及选题范围。4. 规划未来:介绍我未来的写作计划。博客索引我的博客在选题时,都选择的是一些基础内容。下面我从技术的角度,将博客做个分类索引。在ASP.NET程序中,能够在服务端读取的客户端数据通常只有三个:QueryString, Form, Cookie关于这三者,我写了三篇博客详细地介绍过它们:1. 细说Cookie2. 细说 Form (表单) 3. 细说 Reques 阅读全文
posted @ 2012-03-12 20:29 Fish Li 阅读(23016) 评论(174) 推荐(411) 编辑
  2012年3月11日
摘要: 今天与大家分享:一种优化页面执行速度的方法。采用这个方法,可以使用页面的执行速度获得【8倍】的提升效果。为了让您对优化的效果有个直观的了解,我准备了下面的测试结果截图:测试环境:1. Windows Server 2003 SP22. Viaual Studio 2008,使用自带的WebDev.WebServer.EXE运行网站程序。3. (ThinkPad SL510):Core2 T6670 2.2GHz, 4G内存二个红框中的数字反映了优化前后的执行时间。数字表明:优化前后,执行时间有了8倍多的差别。本文的测试结果也仅仅只是一个参考数字,这个结果也只是根据我所设计的测试页面得出的。优化 阅读全文
posted @ 2012-03-11 20:10 Fish Li 阅读(32838) 评论(70) 推荐(169) 编辑
  2012年3月4日
摘要: 2001年4月份,我在博客中发过一个小工具,它是一个用ASP.NET写的SQL SERVER的辅助小工具。在这期间,有些人貌似对那个工具比较有兴趣,所以我常能收到索要源代码的邮件。正好,我上月又发布了我的MVC框架,因此打算用【我的ASP.NET MVC框架】来重写这个工具,并开源。工具的特点:1. 采用ASP.NET编写,并借助MyMVC框架。2. 为了更好地接近桌面程序的操作体验,网站采用纯AJAX的方式实现。3. 界面使用了 JQuery Easy UI4. 代码的语法着色使用了 syntaxhighlighter (JavaScript类库)工具的定位:只是辅助工具,因此功能有限,但要 阅读全文
posted @ 2012-03-04 21:24 Fish Li 阅读(20452) 评论(71) 推荐(171) 编辑
  2012年2月26日
摘要: 在我的第一篇博客中,我发布过一个示例项目,主要演示了我的我的AJAX框架和我的通用数据访问层。虽然在当初我认为我已考虑地比较周全了,而且还提供了足够的说明文档,但在发布后的将近一年的时间里,还是有不少人给我发邮件,问我一些关于不能运行示例的问题。在所有问题中,主要集中在IIS和SQL SERVER的配置方面。因此,我认为还是有必要再来谈一下在IIS6/7以及SQL SERVER中部署ASP.NET网站的过程了。在上篇博客【写自己的ASP.NET MVC框架(下)】中,我又发布了一个示例项目,它也包含一个网站项目,今天的介绍过程将主要以这个示例为主。对于以前的示例所需配置的相同部分将不会重复介绍 阅读全文
posted @ 2012-02-26 20:20 Fish Li 阅读(102214) 评论(91) 推荐(266) 编辑
  2012年2月21日
摘要: 上篇博客【写自己的ASP.NET MVC框架(上)】我给大家介绍我的MVC框架对于Ajax的支持与实现原理。今天的博客将介绍我的MVC框架对UI部分的支持。注意:由于这篇博客是基于前篇博客的,因此有些已说过的内容将会直接跳过,也不会给出提示。所以,如果要想理解这篇博客,那么阅读上篇博客【写自己的ASP.NET MVC框架(上)】则是必要的。MyMVC的特点在开发MyMVC的过程中,我吸取了一些ASP.NET WebForm的使用经验,也参考了ASP.NET MVC,也接受了Martin Fowler对于MVC思想的总结。在设计过程中,我只实现了一些必要的功能,而且没有引入其它的类库与组件,因此 阅读全文
posted @ 2012-02-21 21:38 Fish Li 阅读(63407) 评论(124) 推荐(296) 编辑
  2012年1月29日
摘要: 在ASP.NET编程模型中,一个来自客户端的请求要经过一个称为管线的处理过程。在整个处理请求中,相对于其它对象来说,HttpHandler的处理算得上是整个过程的核心部分。由于HttpHandler的重要地位,我前面已经有二篇博客对它过一些使用上的介绍。【用Asp.net写自己的服务框架】中谈到了它的一般使用方法。【细说ASP.NET的各种异步操作】又详细地介绍了异步HttpHandler的使用方式。今天的博客将着重介绍HttpHandler的配置,创建以及重用过程,还将涉及HttpHandlerFactory的内容。回顾HttpHandlerHttpHandler其实是一类统称:泛指实现了I 阅读全文
posted @ 2012-01-29 22:14 Fish Li 阅读(49385) 评论(101) 推荐(345) 编辑
  2012年1月11日
摘要: 在上篇博客【细说 ASP.NET Cache 及其高级用法】中,我给大家介绍了ASP.NET Cache,这种服务端使用的缓存API 。在我们开发一个ASP.NET网站的过程中,其实有很多地方都是可以使用缓存的,只是由于ASP.NET是一种基于服务端的开发平台,自然我们也经常在服务端的代码中使用各类缓存技术,然而,由于WEB应用程序的服务对象是客户端的浏览器,通常来说,我们并不能直接控制浏览器的行为,但是,浏览器却可以根据后台网站的指示,采取一些优化的方式来更快地呈现页面。客户端浏览器也有自己的缓存机制,通常浏览器也使用缓存来优化一些页面的显示过程,不过,我们并不能直接使用C#代码控制浏览器的 阅读全文
posted @ 2012-01-11 23:55 Fish Li 阅读(27249) 评论(97) 推荐(217) 编辑
  2011年12月27日
摘要: 许多做过程序性能优化的人,或者关注过程程序性能的人,应该都使用过各类缓存技术。而我今天所说的Cache是专指ASP.NET的Cache,我们可以使用HttpRuntime.Cache访问到的那个Cache,而不是其它的缓存技术。以前我在【我心目中的Asp.net核心对象】这篇博客中简单地提过它,今天我打算为它写篇专题博客,专门来谈谈它,因为它实在是太重要了。在这篇博客中,我不仅要介绍它的一些常见用法,还将介绍它的一些高级用法。在上篇博客【在.net中读写config文件的各种方法】的结尾处,我给大家留了一个问题,今天,我将在这篇博客中给出一个我认为较为完美的答案。本文提到的【延迟操作】方法(如 阅读全文
posted @ 2011-12-27 22:22 Fish Li 阅读(104019) 评论(249) 推荐(702) 编辑
  2011年12月18日
摘要: 今天谈谈在.net中读写config文件的各种方法。在这篇博客中,我将介绍各种配置文件的读写操作。由于内容较为直观,因此没有过多的空道理,只有实实在在的演示代码,目的只为了再现实战开发中的各种场景。希望大家能喜欢。通常,我们在.NET开发过程中,会接触二种类型的配置文件:config文件,xml文件。今天的博客示例也将介绍这二大类的配置文件的各类操作。在config文件中,我将主要演示如何创建自己的自定义的配置节点,而不是介绍如何使用appSetting 。请明:本文所说的config文件特指app.config或者web.config,而不是一般的XML文件。在这类配置文件中,由于.net 阅读全文
posted @ 2011-12-18 20:41 Fish Li 阅读(72873) 评论(131) 推荐(488) 编辑
  2011年12月6日
摘要: 今天我来谈一谈容易被人混淆的二个集合:Request[]与Request.Params[] 这二个集合我在博客【我心目中的Asp.net核心对象】中就提到过它们,而且还给出了一个示例,并以截图的形式揭示过它们的差别。但由于那篇博客中有更多有价值的对象要介绍,因此也就没有花太多的篇幅着重介绍这二个集合。但我发现,不知道这二个集合差别的人确实太多,以至于我认为很有必要为它们写个专题来细说它们的差别了。在ASP.NET编程中,有三个比较常见的来自于客户端的数据来源:QueryString, Form, Cookie 。我们可以在HttpRequest中访问这三大对象,比如,可以从QueryStrin 阅读全文
posted @ 2011-12-06 21:06 Fish Li 阅读(58537) 评论(65) 推荐(325) 编辑
  2011年11月20日
摘要: 在上篇博客【C#客户端的异步操作】,我介绍了一些.net中实现异步操作的方法,在那篇博客中,我是站在整个.net平台的角度来讲述各种异步操作的实现方式,并针对各种异步操作以及不同的编程模型给出了一些参考建议。上篇博客谈到的内容可以算是异步操作的基础,今天我再来谈异步,专门来谈在ASP.NET平台下的各种异步操作。在这篇博客中,我主要演示在ASP.NET中如何使用各种异步操作。在后续博客中,我还会分析ASP.NET的源码,解释为什么可以这样做,或者这样的原因是什么,以解密内幕的方式向您解释这些操作的实现原理。由于本文是【C#客户端的异步操作】的续集,因此一些关于异步的基础内容,就不再过多解释了。 阅读全文
posted @ 2011-11-20 20:19 Fish Li 阅读(51978) 评论(91) 推荐(284) 编辑
  2011年10月30日
摘要: 我想很多人都在网上下载过一些示例代码,或者收到一些别人给的示例代码。通常为了方便,都是打成一个压缩包的形式。不过,有些人做事比较马虎,经常就是直接将VS生成的解决方案目录直接打包,这样就会包含大量垃圾文件,诸如:obj目录下的所有文件,而且有时bin目录还有二个目录,PDB文件有二份,甚至连xxx.vshost.exe文件也有二份!更让人无语的是,有些人用SVN这种源代码管理软件,每个目录还有个.svn目录!这种做法显然很容易将一个不大的项目搞成一个比较大的压缩包,这种压缩包一旦做好,上传也慢,人家下载也慢,还会浪费许多服务器资源,下载到这种压缩包,只能让人无语了。没办法,有些人就是很懒,而且 阅读全文
posted @ 2011-10-30 20:46 Fish Li 阅读(24817) 评论(61) 推荐(100) 编辑
  2011年10月26日
摘要: 由于现在会使用WinForm的人是越来越少了,可能有时候做点小东西就只好用ASP.NET去完成了(喜欢控制台的朋友请不要顶针),如果是这样,悲剧就发生了:一个小工具(或者小的演示项目),发给朋友去用,总不至于让人家也装个IIS或者VS20XX吧?如果没有这二样,这种小工具还真不方便运行。怎么办?做过ASP.NET开发的人都知道:网站通常要布署到IIS上才能直接运行,当然也不排除你用VS打开项目并使用VS自带的WebDev.WebServer.exe来启动程序。这种方式难免有不方便的时候。我平时就喜欢写些小工具,还好,我会WinForm,所以这个问题还好解决。但有时我要把一些小的网站作品给别人使 阅读全文
posted @ 2011-10-26 23:03 Fish Li 阅读(28388) 评论(161) 推荐(173) 编辑
  2011年10月23日
摘要: 上篇博客【用Asp.net写自己的服务框架】我讲述了如何实现自己的服务框架,但我想很多人应该用过WebService这类服务框架,相比起来,似乎还缺少什么东西,是的,我也感觉到了。比如:我可以很容易地利用WebService, WCF框架编写一个服务,在客户端也可以很容易地通过【添加服务引用】的方式来生成一个代理类,然后就可以调用服务了,非常简单,更酷的是,IDE生成的代理类还有异步调用功能!我一直认为,对于服务框架来说,最重要的事是将一个C#方法公开为一个服务方法,供远程客户端调用。因此,我上篇博客中演示的服务框架显然已经可以简单地完成这个功能。不过,目前如果要使用这个服务框架,客户端还不够 阅读全文
posted @ 2011-10-23 20:37 Fish Li 阅读(51742) 评论(122) 推荐(313) 编辑
  2011年9月5日
摘要: 我的上篇博客【我心目中的Asp.net核心对象】讲述了一些我认为在Asp.net中比较重要的核心对象,以及演示了直接使用它们也能实现一个简单的服务响应。今天,我将继续把我认为Asp.net的另一些重要的内容拿出来与大家一起分享,同时将使用本次所讲述的内容改进上篇博客所演示的那个简单的服务,让它成为一个真正能用的服务框架。在这篇博客中,不仅会继续演示上次提到的三个核心对象,我还会再引入另二个关键对象,我将用更多实战代码来演示它们如何在一起协同工作,来完成许多常见任务,展现它们的精彩故事,也最终会让它们来实现我的服务框架。因此,这篇博客不仅仅是针对Asp.net的基础技术的讲解,而是更多地以实战形 阅读全文
posted @ 2011-09-05 22:35 Fish Li 阅读(67849) 评论(183) 推荐(824) 编辑
  2011年8月21日
摘要: 想当初在只使用WebForms框架并以服务端为中心的开发模式时,发现Asp.net好复杂。一大堆服务端控件,各有各的使用方法,有些控件的事件也很重要,必须在合适地时机去响应,还真有些复杂。后来逐渐发现这些复杂的根源其实就是服务器控件相关的抽象逻辑。随着Ajax越用越多,可能有些人也做过这些事情:【新建一个ashx文件,读取一些用户的输入数据,Form, QueryString,然后调用业务逻辑代码,将处理后的结果序列化成JSON字符串再发给客户端】,这样也能完成一次请求。不知大家有没有做过这类事情,反正我是做过的。慢慢地,我也嫌烦了,这些事情中除了调用业务逻辑部分,都是些体力活嘛。于是想,写点 阅读全文
posted @ 2011-08-21 21:51 Fish Li 阅读(55806) 评论(195) 推荐(706) 编辑