<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
<title><![CDATA[程序人生]]></title>
        <image>
        <title>http://hi.baidu.com</title>
        <link>http://hi.baidu.com</link>
        <url>http://img.baidu.com/img/logo-hi.gif</url>
        </image>
<description><![CDATA[在这里与大家共同交流，共同进步，学到更多的东西！]]></description>
<link>http://hi.baidu.com/xiao%5Fwei2008</link>
<language>zh-cn</language>
<generator>www.baidu.com</generator>
<ttl>5</ttl>


<item>
        <title><![CDATA[在Windows Server 2008中启动SuperFetch]]></title>
        <link><![CDATA[http://hi.baidu.com/xiao%5Fwei2008/blog/item/b1e8c91c1b626c8187d6b6cf.html]]></link>
        <description><![CDATA[
		
		<p><font size="3">SuperFetch是微软Windows Vista系统的特性之一,通过导入大部分由内存中一个应用程序或进程需要的文件或数据,尽可能快地重新将预取数据从虚拟内存页面文件移回到物理内存中以保证性能增强的连续性,所以可以在需要时更迅速地访问它们.</font></p>
<p><font size="3">而在以稳定见长的Windows Server 2008服务器系统中,该功能默认被禁用,当然您如果正在把WS2008当成台式机系统来用的话,建议重新开启SuperFetch以取得更高的性能,方法如下:</font></p>
<p><font size="3">　　注册表位置做如下修改:</font></p>
<p><font size="3">　　[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory ManagementPrefetchParameters]</font></p>
<p><font size="3">　　&quot;EnableSuperfetch&quot;=dword:00000003</font></p>
<p><font size="3">　　&quot;EnablePrefetcher&quot;=dword:00000001</font></p>
<p><font size="3">运行 regedit 打开注册表<br>
<br>
   、找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters 这个注册表项<br>
  &nbsp;&nbsp;&nbsp; 新建 dword项 名称为 EnablePrefetcher 数值为 3</font></p>
<p><br>
打开 服务 ，将SuperFetch设为 自动 可以立刻启动成功<br>
<br>
    <img src="http://www.ithov.com/Server/UploadFiles_9561/200906/20090604143511133.jpg" width="419" height="442"></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/xiao%5Fwei2008/blog/category/%B5%E7%C4%D4%B3%A3%CA%B6">电脑常识</a>&nbsp;<a href="http://hi.baidu.com/xiao%5Fwei2008/blog/item/b1e8c91c1b626c8187d6b6cf.html#comment">查看评论</a>]]></description>
        <pubDate>2009-11-25  16:39</pubDate>
        <category><![CDATA[电脑常识]]></category>
        <author><![CDATA[xiao_wei2008]]></author>
		<guid>http://hi.baidu.com/xiao%5Fwei2008/blog/item/b1e8c91c1b626c8187d6b6cf.html</guid>
</item>

<item>
        <title><![CDATA[System.Web.HttpException: 服务器太忙]]></title>
        <link><![CDATA[http://hi.baidu.com/xiao%5Fwei2008/blog/item/bd3ddb8bf87ecb769e2fb48b.html]]></link>
        <description><![CDATA[
		
		Windows 2003 Enterprise Server自带IIS 6.0，上面有多个站点，其中一个是企业门户，访问量较大，由于门户需要连接很多数据库和WebService接口获取需要展示的数据，有时在这些数据源出现缓慢的时候，也会导致门户站点报告&ldquo;<strong><span style="color: #ff0000">System.Web.HttpException: 服务器太忙</span></strong>&rdquo;错误。<br>
<br>
从发生错误的情况判断应该是服务器的处理队列达到限制，因此抛出异常。<br>
<br>
之前曾经调整过对应Framework版本的machine.config文件，主要涉及<strong>processModel</strong>节的<strong>maxWorkerThreads</strong>、<strong>maxIoThreads</strong>和<strong>minWorkerThreads</strong>，情况有所好转，但是一直未能根除，感觉只是提升了WEB服务器自身的处理极限，但当外部数据源缓慢的时候，需要处理的事务依然会排长队，超出队列长度，进而报错。<br>
<br>
最近看到篇介绍machine.config配置的文章：<a href="http://www.semcase.com/docus/iis/aaconaspnetsettingsschemareference.htm" target="_blank"><font color="#0078cc">《ASP.NET 设置架构参考》</font></a>，很详细，这才发现，原来已经距离答案很近，只是没留意，请注意学习processModel章节。<br>
<br>
首先在machine.config中是可以配置整个WEB服务器的请求队列长度（<strong>processModel</strong>节<strong>requestQueueLimit</strong>，默认5000）和单个站点默认的请求队列长度（<strong>httpRuntime</strong>节<strong>appRequestQueueLimit</strong>，默认100）；考虑到其他站点访问量没有这么大，并且整个WEB服务器的请求队列长度5000也应该足够，那我们需要的就是单独修改该站点的队列长度；鉴于httpRuntime节是可以在对应站点下的web.config中配置的，所以我们只需要改动这个站点的web.config即可，增加一行配置，指定队列长度为1000（未修改之前是对应Framework版本下的machine.config中httpRuntime节appRequestQueueLimit决定默认值的），问题有明显改善，今天在一度极端缓慢的情况下，也没有观察到服务器太忙的错误重现。<br>
<br>
<span style="color: #0000ff">&lt;system.web&gt;<br>
...<br>
&lt;httpRuntime appRequestQueueLimit=&quot;1000&quot;/&gt;<br>
...<br>
&lt;/system.web&gt;<br>
<br>
<br>
</span><span style="color: #000000">附：<br>
1、怎么知道我的站点是用的哪个版本的Microsoft.NET Framework：IIS中对应站点鼠标右键&gt;属性<br>
<img height="451" src="http://wangjia.net/bo-blog/attachment/200709/1190299024_0.jpg" width="467" border="0"><br>
<br>
2、machine.config文件在哪里：一般&lt;WINDOWS安装目录&gt;\Microsoft.NET\Framework\对应版本号\CONFIG\<br>
<br>
3、网上看到另外一种说法是修改对应站点归属应用程序池的&ldquo;请求队列限制&rdquo;来解决相同问题，我之前单独修改试过，观察不到效果；不过我想可以双管齐下，现在也是这么做的；这个的默认值是4000<br>
<img height="428" src="http://wangjia.net/bo-blog/attachment/200709/1190299159_0.jpg" width="457" border="0"><br>
<br>
4、怎么知道某个站点用的哪个应用程序池：IIS中对应站点鼠标右键&gt;属性<br>
<img height="453" src="http://wangjia.net/bo-blog/attachment/200709/1190299925_0.jpg" width="474" border="0"></span><br> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/xiao%5Fwei2008/blog/category/%B1%E0%B3%CC%D6%D0%B3%A3%BC%FB%B4%ED%CE%F3">编程中常见错误</a>&nbsp;<a href="http://hi.baidu.com/xiao%5Fwei2008/blog/item/bd3ddb8bf87ecb769e2fb48b.html#comment">查看评论</a>]]></description>
        <pubDate>2009-09-03  12:54</pubDate>
        <category><![CDATA[编程中常见错误]]></category>
        <author><![CDATA[xiao_wei2008]]></author>
		<guid>http://hi.baidu.com/xiao%5Fwei2008/blog/item/bd3ddb8bf87ecb769e2fb48b.html</guid>
</item>

<item>
        <title><![CDATA[AspNetPager]]></title>
        <link><![CDATA[http://hi.baidu.com/xiao%5Fwei2008/blog/item/956d89deb50c6b5d94ee37ad.html]]></link>
        <description><![CDATA[
		
		<p>添加引用AspNetPager.dll <br>
工具箱中添加&quot;选择项&quot;-.Net Framework组件-AspNetPager <br>
页面中添加AspNetPager控件 <br>
Code<br>
1&lt;webdiyer:AspNetPager ID=&quot;AspNetPager1&quot; runat=&quot;server&quot; <br>
2AlwaysShow=&quot;True&quot; //总是显示分页控件，即使要分页的数据只有一页 <br>
3  OnPageChanged=&quot;AspNetPager1_PageChanged&quot;  //分页发生改变时触发事件<br>
4UrlPaging=&quot;true&quot;  //通过URL传递分页信息的方式来分页。如果设为true，禁用ViewState也能达到效果。如果设置为false，禁用了viewstate则无法实现分页. <br>
5NumericButtonTextFormatString=&quot;[{0}]&quot; //页索引数字显示的格式<br>
6 ShowCustomInfoSection=&quot;Left&quot;&gt;&nbsp;&nbsp;  //显示当前页和总页数信息，默认值不显示，为left则将显示在页索引前，为right则为页索引后&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/webdiyer:AspNetPager&gt;<br>
初始化页面，添加ChangePage事件 <br>
Code<br>
 1 protected void Page_Load(object sender, EventArgs e)<br>
 2&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  .<br>
 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  .<br>
 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  .<br>
 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  BindData();//数据绑定<br>
 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  .<br>
 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  .<br>
 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  .<br>
10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
11<br>
12//翻页事件<br>
13&nbsp;&nbsp;&nbsp;&nbsp;  protected void ChangePage(object src, PageChangedEventArgs e)<br>
14&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  pager1.CurrentPageIndex = e.NewPageIndex;<br>
16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  BindData();<br>
17&nbsp;&nbsp;&nbsp;&nbsp;  }&nbsp;&nbsp;&nbsp;  <br>
//此处为调用分页存储过程<br>
DataSet ds = DbUtility.QueryPagerData(&quot;jc_Province&quot;, &quot;Id&quot;, pageIndex, PageSize, &quot;&quot;, OrderBy, Where, out ItemCount, out PageCount);</p>
<p>base.DataBind（pageIndex）;</p>
<p>PROC <br>
  1CREATE PROC sp_PageView<br>
  2 @tbname&nbsp;&nbsp;&nbsp;&nbsp;  sysname,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  --要分页显示的表名<br>
  3 @FieldKey&nbsp;&nbsp;  nvarchar(1000),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  --用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段<br>
  4 @PageCurrent int=1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  --要显示的页码<br>
  5 @PageSize&nbsp;&nbsp;  int=10,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  --每页的大小(记录数)<br>
  6 @FieldShow nvarchar(1000)='',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段<br>
  7 @FieldOrder nvarchar(1000)='',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC,用于指定排序顺序<br>
  8 @Where&nbsp;&nbsp;&nbsp;  nvarchar(1000)='',&nbsp;&nbsp;&nbsp;&nbsp;  --查询条件<br>
  9 @ItemCount int OUTPUT,<br>
 10 @PageCount int OUTPUT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  --总页数<br>
 11 AS<br>
 12 SET NOCOUNT ON<br>
 13 --检查对象是否有效<br>
 14 IF OBJECT_ID(@tbname) IS NULL<br>
 15 BEGIN<br>
 16&nbsp;&nbsp;&nbsp;&nbsp;  RAISERROR(N'对象&quot;%s&quot;不存在',1,16,@tbname)<br>
 17&nbsp;&nbsp;&nbsp;&nbsp;  RETURN<br>
 18 END<br>
 19 IF OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0<br>
 20&nbsp;&nbsp;&nbsp;&nbsp;  AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0<br>
 21&nbsp;&nbsp;&nbsp;&nbsp;  AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0<br>
 22 BEGIN<br>
 23&nbsp;&nbsp;&nbsp;&nbsp;  RAISERROR(N'&quot;%s&quot;不是表、视图或者表值函数',1,16,@tbname)<br>
 24&nbsp;&nbsp;&nbsp;&nbsp;  RETURN<br>
 25 END<br>
 26 --分页字段检查<br>
 27 IF ISNULL(@FieldKey,N'')=''<br>
 28 BEGIN<br>
 29&nbsp;&nbsp;&nbsp;&nbsp;  RAISERROR(N'分页处理需要主键（或者惟一键）',1,16)<br>
 30&nbsp;&nbsp;&nbsp;&nbsp;  RETURN<br>
 31 END<br>
 32 --其他参数检查及规范<br>
 33 IF ISNULL(@PageCurrent,0)&lt;1 SET @PageCurrent=1<br>
 34 IF ISNULL(@PageSize,0)&lt;1 SET @PageSize=10<br>
 35 IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'<br>
 36 IF ISNULL(@FieldOrder,N'')=N''<br>
 37&nbsp;&nbsp;&nbsp;&nbsp;  SET @FieldOrder=N''<br>
 38 ELSE<br>
 39&nbsp;&nbsp;&nbsp;&nbsp;  SET @FieldOrder=N'ORDER BY '+LTRIM(@FieldOrder)<br>
 40 IF ISNULL(@Where,N'')=N''<br>
 41&nbsp;&nbsp;&nbsp;&nbsp;  SET @Where=N''<br>
 42 ELSE<br>
 43&nbsp;&nbsp;&nbsp;&nbsp;  SET @Where=N'WHERE (<a href="mailto: +@Where+N ) ">'+@Where+N')'</a><br>
 44 --如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)<br>
 45 <br>
 46&nbsp;&nbsp;&nbsp;&nbsp;  DECLARE @sql nvarchar(4000)<br>
 47&nbsp;&nbsp;&nbsp;&nbsp;  SET @sql=N'SELECT @ItemCount=COUNT(*)'<br>
 48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  +N' FROM <a href="mailto: +@tbname">'+@tbname</a><br>
 49&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  +N' <a href="mailto: +@Where">'+@Where</a><br>
 50&nbsp;&nbsp;&nbsp;&nbsp;  EXEC sp_executesql @sql,N'@ItemCount int OUTPUT',@ItemCount OUTPUT<br>
 51&nbsp;&nbsp;&nbsp;&nbsp;  SET @PageCount=(@ItemCount+@PageSize-1)/@PageSize<br>
 52 <br>
 53 print @PageCount<br>
 54 print @ItemCount<br>
 55 --计算分页显示的TOPN值<br>
 56 DECLARE @TopN varchar(20),@TopN1 varchar(20)<br>
 57 SELECT @TopN=@PageSize,<br>
 58&nbsp;&nbsp;&nbsp;&nbsp;  @TopN1=(@PageCurrent-1)*@PageSize<br>
 59 --第一页直接显示<br>
 60 IF @PageCurrent=1<br>
 61&nbsp;&nbsp;&nbsp;&nbsp;  EXEC(N'SELECT TOP <a href="mailto: +@TopN">'+@TopN</a><br>
 62&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  +N' <a href="mailto: +@FieldShow">'+@FieldShow</a><br>
 63&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  +N' FROM <a href="mailto: +@tbname">'+@tbname</a><br>
 64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  +N' <a href="mailto: +@Where">'+@Where</a><br>
 65&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  +N' <a href="mailto: +@FieldOrder">'+@FieldOrder</a>)<br>
 66 ELSE<br>
 67 BEGIN<br>
 68&nbsp;&nbsp;&nbsp;&nbsp;  --处理别名<br>
 69&nbsp;&nbsp;&nbsp;&nbsp;  IF @FieldShow=N'*'<br>
 70&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  SET @FieldShow=N'a.*'<br>
 71&nbsp;&nbsp;&nbsp;&nbsp;  --生成主键(惟一键)处理条件<br>
 72&nbsp;&nbsp;&nbsp;&nbsp;  DECLARE @Where1 nvarchar(4000),@Where2 nvarchar(4000),<br>
 73&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  @s nvarchar(1000),@Field sysname<br>
 74&nbsp;&nbsp;&nbsp;&nbsp;  SELECT @Where1=N'',@Where2=N'',@s=@FieldKey<br>
 75&nbsp;&nbsp;&nbsp;&nbsp;  WHILE CHARINDEX(N',',@s)&gt;0<br>
 76&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  SELECT @Field=LEFT(@s,CHARINDEX(N',',@s)-1),<br>
 77&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  @s=STUFF(@s,1,CHARINDEX(N',',@s),N''),<br>
 78&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  @Where1=@Where1+N' AND <a href="mailto:a. +@Field+N =b. +@Field">a.'+@Field+N'=b.'+@Field</a>,<br>
 79&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  @Where2=@Where2+N' AND <a href="mailto:b. +@Field+N ">b.'+@Field+N'</a> IS NULL',<br>
 80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <a href="mailto:--@Where=REPLACE(@Where,@Field,N a. +@Field">--@Where=REPLACE(@Where,@Field,N'a.'+@Field</a>),<br>
 81&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  @FieldOrder=REPLACE(@FieldOrder,@Field,N'a.'+@Field),<br>
 82&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  @FieldShow=REPLACE(@FieldShow,@Field,N'a.'+@Field)<br>
 83&nbsp;&nbsp;&nbsp;&nbsp;  SELECT <a href="mailto:--@Where=REPLACE(@Where,@s,N a. +@s">--@Where=REPLACE(@Where,@s,N'a.'+@s</a>),<br>
 84&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  @FieldOrder=REPLACE(@FieldOrder,@s,N'a.'+@s),<br>
 85&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  @FieldShow=REPLACE(@FieldShow,@s,N'a.'+@s),<br>
 86&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  @Where1=STUFF(@Where1+N' AND <a href="mailto:a. +@s+N =b. +@s,1,5,N  ">a.'+@s+N'=b.'+@s,1,5,N''</a>),&nbsp;&nbsp;&nbsp;  <br>
 87&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  @Where2=CASE<br>
 88&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  WHEN @Where='' THEN N'WHERE ('<br>
 89&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ELSE @Where+N' AND ('<br>
 90&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <a href="mailto:END+N b. +@s+N ">END+N'b.'+@s+N'</a> IS <a href="mailto:NULL +@Where2+N ) ">NULL'+@Where2+N')'</a><br>
 91&nbsp;&nbsp;&nbsp;  DECLARE @QUERYSTRING varchar(2000)<br>
 92&nbsp;&nbsp;&nbsp;  SET @QUERYSTRING =&nbsp;&nbsp;&nbsp;&nbsp;  N'SELECT TOP <a href="mailto: +@TopN">'+@TopN</a><br>
 93&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  +N' <a href="mailto: +@FieldShow">'+@FieldShow</a><br>
 94&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  +N' FROM <a href="mailto: +@tbname">'+@tbname</a><br>
 95&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  +N' a LEFT JOIN(SELECT TOP <a href="mailto: +@TopN1">'+@TopN1</a><br>
 96&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  +N' <a href="mailto: +@FieldKey">'+@FieldKey</a><br>
 97&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  +N' FROM <a href="mailto: +@tbname">'+@tbname</a><br>
 98&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  +N' a <a href="mailto: +@Where">'+@Where</a><br>
 99&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  +N' <a href="mailto: +@FieldOrder">'+@FieldOrder</a><br>
100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  +N')b ON <a href="mailto: +@Where1">'+@Where1</a><br>
101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  +N' <a href="mailto: +@Where2">'+@Where2</a><br>
102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  +N' <a href="mailto: +@FieldOrder">'+@FieldOrder</a><br>
103&nbsp;&nbsp;&nbsp;  PRINT @QUERYSTRING&nbsp;&nbsp;&nbsp;  <br>
104&nbsp;&nbsp;&nbsp;  --执行查询<br>
105&nbsp;&nbsp;&nbsp;  EXEC(@QUERYSTRING)<br>
106<br>
107<br>
108END<br>
109GO<br>
转自：<a href="http://www.cnblogs.com/double1030/archive/2009/01/22/1379717.html">http://www.cnblogs.com/double1030/archive/2009/01/22/1379717.html</a></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/xiao%5Fwei2008/blog/category/asp%2Enet%C4%A3%BF%E9%D4%B4%C2%EB">asp.net模块源码</a>&nbsp;<a href="http://hi.baidu.com/xiao%5Fwei2008/blog/item/956d89deb50c6b5d94ee37ad.html#comment">查看评论</a>]]></description>
        <pubDate>2009-09-01  11:36</pubDate>
        <category><![CDATA[asp.net模块源码]]></category>
        <author><![CDATA[xiao_wei2008]]></author>
		<guid>http://hi.baidu.com/xiao%5Fwei2008/blog/item/956d89deb50c6b5d94ee37ad.html</guid>
</item>

<item>
        <title><![CDATA[最新的.Net面试题及答案]]></title>
        <link><![CDATA[http://hi.baidu.com/xiao%5Fwei2008/blog/item/3318d118f22d050e35fa4128.html]]></link>
        <description><![CDATA[
		
		<p>1:a=10,b=15，在不用第三方变题的前提下，把a,b的值互换<br>
&nbsp;&nbsp;  a=a+b;b=a-b;a=(a-b)/2;b=b+a<br>
2：已知数组int[] max={6,5,2,9,7,4,0};用快速排序算法按降序对其进行排列，并返回数组<br>
public class TestQuickSort { <br>
<br>
private int[] array = null; <br>
<br>
private void quickSort(int lowest, int highest) { <br>
if (array == null || lowest &lt; 0 || lowest &gt;= highest <br>
|| highest &gt;= array.length) { <br>
return; <br>
} <br>
int low = lowest; <br>
int high = highest; <br>
int key = low++; <br>
for (; low &lt;= high;) { <br>
if (key &lt; high) { <br>
if (array[key] &gt; array[high]) { <br>
array[high] = array[key] + (array[key] = array[high]) * 0; <br>
key = high; <br>
} <br>
high--; <br>
} <br>
<br>
if (key &gt; low) { <br>
if (array[key] &lt; array[low]) { <br>
array[low] = array[key] + (array[key] = array[low]) * 0; <br>
key = low; <br>
} <br>
low++; <br>
} <br>
} <br>
quickSort(lowest, key - 1); <br>
quickSort(key + 1, highest); <br>
} <br>
<br>
/** <br>
* @param args <br>
*/ <br>
public static void main(String[] args) { <br>
TestQuickSort test = new TestQuickSort(); <br>
int[] array = {6,5,2,9,7,4,0}; <br>
test.array = array; <br>
test.quickSort(0, array.length - 1); <br>
int length = test.array.length; <br>
for (int i = 0; i &lt; length; i++) { <br>
System.out.println(test.array[i]); <br>
} <br>
} <br>
} <br>
快速排序是综合性能最好的内部排序算法！</p>
<p>算法</p>
<p> private   static   int   Partition(ref   int[]   dest,   int   be,   int   en,   ref   int   swapTimes)   <br>
      {   <br>
        int   temp   =   dest[en];   <br>
        int   b   =   be;   <br>
        int   e   =   en;   <br>
        while(b   !=   e)   <br>
        {   <br>
          while(dest[b]   &lt;   temp   &amp;&amp;   b   &lt;   e)   <br>
            b   ++;   <br>
          if(b   &lt;   e)   <br>
          {   <br>
            dest[e]   =   dest[b];   <br>
            e   --;   <br>
            swapTimes   ++;   <br>
          }   <br>
    <br>
          while(dest[e]   &gt;   temp   &amp;&amp;   b   &lt;   e)   <br>
          {   <br>
            e   --;   <br>
          }   <br>
          if(b   &lt;   e)   <br>
          {   <br>
            dest[b]   =     dest[e];   <br>
            b   ++;   <br>
            swapTimes   ++;   <br>
          }   <br>
        }   <br>
    <br>
        dest[b]   =   temp;   <br>
        return   b;   <br>
    <br>
      }&nbsp;&nbsp;&nbsp;<br>
<br>
3：请简述面向对象的多态的特性及意义！<br>
在c#中多态性的定义是：同一操作作用于不同的类的实例、不同的类将进行不同的解释、最后产生不同的执行结果。</p>
<p>c#支持两种类型的多态性：<br>
编译时的多态性（静态联编）<br>
编译时的多态性是通过重载来实现的。方法重载和操作符重载、它们都实现了编译时的多态性。<br>
对于非虚的成员来说系统在编译时根据传递的参数、返回的类型等信息决定实现何种操作。<br>
运行时的多态性（动态联编）<br>
运行时的多态性就是指直到系统运行时才根据实际情况决定实现何种操作c#中运行时的多态性。<br>
通过虚成员实现。<br>
编译时的多态性为我们提供了运行速度快的特点而运行时的多态性则带来了高度灵活和抽象的特点。</p>
<p><br>
4：session喜欢丢值且占内存，Cookis不安全，请问用什么办法代替这两种原始的方法<br>
&nbsp;&nbsp;&nbsp;  用VIEWSTATE /Profile/自己在服务器端实现个Cache<br>
5：对数据的并发采用什么办法进行处理较好。<br>
&nbsp;&nbsp;  １、使用事务对象：</p>
<p> 1SqlConnection&nbsp;&nbsp;  conn&nbsp;&nbsp;  =&nbsp;&nbsp;  new&nbsp;&nbsp;  SqlConnection(ConnectionString);&nbsp;&nbsp;  <br>
 2  SqlCommand&nbsp;&nbsp;  cmd&nbsp;&nbsp;  =&nbsp;&nbsp;  new&nbsp;&nbsp;  SqlCommand(&quot;delete&nbsp;&nbsp;  from&nbsp;&nbsp;  table_a&nbsp;&nbsp;  where&nbsp;&nbsp;  bh=1&quot;,conn);&nbsp;&nbsp;  <br>
 3  SqlTransaction&nbsp;&nbsp;  Trans&nbsp;&nbsp;  ;　　　//事物对象&nbsp;&nbsp;  <br>
 4&nbsp;&nbsp;&nbsp;  <br>
 5  conn.Open();&nbsp;&nbsp;  <br>
 6  Trans&nbsp;&nbsp;  =&nbsp;&nbsp;  conn.BeginTransaction(IsolationLevel.ReadCommitted,&nbsp;&nbsp;  &quot;MyTrans&quot;);&nbsp;&nbsp;  <br>
 7  cmd.Transaction&nbsp;&nbsp;  =&nbsp;&nbsp;  Trans;&nbsp;&nbsp;  <br>
 8  try{&nbsp;&nbsp;  <br>
 9  cmd.ExecuteNonQuery();&nbsp;&nbsp;  <br>
10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //如果成功，则提交数据&nbsp;&nbsp;  <br>
11  Trans.Commit();&nbsp;&nbsp;  <br>
12  }&nbsp;&nbsp;  <br>
13  catch&nbsp;&nbsp;  (SqlException&nbsp;&nbsp;  Err){&nbsp;&nbsp;  <br>
14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //产生错误，则回滚事物对象&nbsp;&nbsp;  <br>
15  Trans.Rollback(&quot;MyTrans&quot;);&nbsp;&nbsp;  <br>
16  }&nbsp;&nbsp;  <br>
17  finally{&nbsp;&nbsp;  <br>
18  conn.Close();&nbsp;&nbsp;  <br>
19  }&nbsp;&nbsp;  <br>
2、 使用lock()  unlock() <br>
3、使用时间戳，使用ｔｉｍｅｔａｍｐ类型。<br>
6：已知Oracle数据库有GD和ZS两个数据库，GD数据库v_s表有数据写入时，从v_s表中提取最新数据到ZS数据库的D_E表中。请问用什么办法解决这一问题？如果又碰到不能互访的问题时，又用什么办法解决？</p>
<p>答案:1:触发器   <br>
  2:不能互访时,肯定是权限出了问题,可以对v_s表赋予D_E表的操作权限</p>
<p>7：已知Oracle数据库a,b<br>
现在在a用户权限下，访问b数据库sql语句为select a.* From b a,请改正这一句Sql的写法</p>
<p>答案:select   *   From   b.TableName&nbsp;&nbsp;</p>
<p>8：当对数据库进行海量级的数据插入时，数据库出现报错，错误原因可能有哪些，以你的经验谈谈你的解决办法</p>
<p>答案:1:数据库表空间不足,因为Oracle必须指定表空间的大小   更改表空间大小,如果装有双机热备则必须对物理存贮文件进行手工更改   <br>
            2:表死锁   采用脚本形式对表解锁   <br>
            3:监听丢失,重启监听解决&nbsp;&nbsp;</p>
<p>9：算法分析<br>
AH 20060625 12 44 01 CAD001<br>
AH 20060625 12 44 01 CAD001<br>
AH 20060625 13 44 02 CAD001<br>
AH 20060625 14 44 03 CAD001<br>
说明：第二列表示日期，第三列表示温度，第四列表示水位，第五列表示流量，第6列表示水位测站编码,每一列表示一个字段<br>
很明显第一条数据和第二条数据重复，然数据表中有主键和外键的约束，是不允许有重复的数据存在的,请构造算法将重复的数据Del掉</p>
<p>select distinct * into #Tmp from tableName <br>
drop table tableName <br>
select * into tableName from #Tmp <br>
drop table #Tmp</p>
<p>10:javascript算法<br>
已知a,b,现在点鼠标a会向b游动,鼠标停,a会停下来<br>
请实现&quot;跑步算法&quot; <br>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
　　1， 请你说说.NET中类和结构的区别?</p>
<p>　　答：结构和类具有大体的语法，但是结构受到的限制比类要多。结构不能申明有默认的构造函数，为结构的副本是又编译器创建和销毁的，所以不需要默认的构造函数和析构函数。结构是值类型，所以对结构变量所做的改变不会影响其的原值，而类是应用类型，改变其变量的值会改变其原值。申明结构用Struck关键字，申明类用class关键字，向方法传递结构是时是通过值传递的，而不是通过引用。与类不同，结构的实例化可以不使用New关键字。类可以实现接口。</p>
<p>　　2， 死锁的必要条件?怎么克服?</p>
<p>　　答：系统的资源不足，进程的推进的顺序不合适，资源分配不当，一个资源每次只能被一个进程使用，一个资源请求资源时，而此时这个资源已阻塞，对已获得资源不放，进程获得资源时，未使用完前，不能强行剥夺。</p>
<p>　　3， 接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类?</p>
<p>　　答：接口是可以继承接口的，抽象类是可以实现接口的，抽象类可以继承实体类，但是有个条件，条件是，实体类必须要有明确的构造函数。</p>
<p>　　4， 构造器Constructor是否可以被继承?是否可以被Override?</p>
<p>　　答：Constructor不可以被继承，因此不能被重写(Overriding)，但可以被重载(Overloading).</p>
<p>　　5， 当一个线程进入一个对象的方法后，其它线程是否可以进入该对象的方法?</p>
<p>　　答：不可以，一个对象的方法只能由一个线程访问。</p>
<p>　　6， 用最有效的方法算出等已8对于几?</p>
<p>　　答：2&lt;&lt;3.</p>
<p>　　7, C#是否可以对内存直接进行操作?</p>
<p>　　答：这个问题比较难回答，也是个很大的问题。但是可以这样问答。C#是可以对内存进行直接操作的，虽然很少用到指针，但是C#是可以使用指针的，在用的时候需要在前边加unsafe,，在.net中使用了垃圾回收机制(GC)功能，它替代了程序员，不过在C#中不可以直接使用finalize方法，而是在析构函数中调用基类的finalize()方法。</p>
<p>　　8， Error和Exception有是区别?</p>
<p>　　答：error表示恢复不是不可能，但是很困难，exception表示一种实际或实现问题，它表示程序运行正常不可以发生的。</p>
<p>　　9， 谈谈final,finally,finallize的区别?</p>
<p>　　答：final用于申明属性，方法和类，表示属性不可变，方法不可以被覆盖，类不可以被继承。</p>
<p>　　Finally是异常处理语句结构中，表示总是执行的部分。</p>
<p>　　Finallize表示是object类一个方法，在垃圾回收机制中执行的时候会被调用被回收对象的方法。</p>
<p>　　10, HashMap和Hashtable区别?</p>
<p>　　答：HashMap是Hashtable的轻量级实现，非线程安全的实现他们都实现了map接口，主要区别是HashMap键值可以为空null,效率可以高于Hashtable。</p>
<p>　　11，Collection和Collections的区别?</p>
<p>　　答：Collection是集合类的上级接口，Collections是针对集合类的一个帮助类，它提供一系列静态方法来实现对各种集合的搜索，排序，线程安全化操作。</p>
<p>　　12，C#中委托是什么?事件是不是一种委托?</p>
<p>　　答：委托是一种安全的类似与函数指针，但是她比指针要安全的多，它可以把方法作为一个参数传递给另一个方法，可以理解为指向函数的引用。事件是一种消息机制，它是一种委托，委托不带方法体。</p>
<p>　　13，Override, Overload,的区别?</p>
<p>　　答：Override是重写的意思，它表示重写基类的方法，而且方法的名称，返回类型，参数类型，参数个数要与基类相同。</p>
<p>　　Overload是重载是意思，它也表示重写基类的方法，但是只要方法名相同，别的可以不同。</p>
<p>　　14，在一个BS结构中需要传递变量值时，不能使用session,coolke,application,你有几中方法?</p>
<p>　　答：this.server.Transfer,Querystring.</p>
<p>　　15, C#种索引器实现过程，是否只能根据数字索引?</p>
<p>　　答：不是的，可以是任意类型。</p>
<p>　　16，New有种用法?</p>
<p>　　答：有3种，第一种是，实例化如：New Class()</p>
<p>　　第二种是，public new 隐藏基类的方法</p>
<p>　　第三种是，在泛型类申明中的任何类型参数都必须有公共的无参构造函数。</p>
<p>　　17，任何把一个Array复制到Arraylist中?</p>
<p>　　答：Foreach (object o in Array), ArrayList.Add (0)</p>
<p><br>
本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/opou/archive/2009/07/27/4385590.aspx">http://blog.csdn.net/opou/archive/2009/07/27/4385590.aspx</a></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/xiao%5Fwei2008/blog/category/asp%2Enet%C4%A3%BF%E9%D4%B4%C2%EB">asp.net模块源码</a>&nbsp;<a href="http://hi.baidu.com/xiao%5Fwei2008/blog/item/3318d118f22d050e35fa4128.html#comment">查看评论</a>]]></description>
        <pubDate>2009-08-24  17:15</pubDate>
        <category><![CDATA[asp.net模块源码]]></category>
        <author><![CDATA[xiao_wei2008]]></author>
		<guid>http://hi.baidu.com/xiao%5Fwei2008/blog/item/3318d118f22d050e35fa4128.html</guid>
</item>

<item>
        <title><![CDATA[jquery radio取值，checkbox取值，select取值，radio选中，checkbox选中，select选中，及其相关]]></title>
        <link><![CDATA[http://hi.baidu.com/xiao%5Fwei2008/blog/item/e7682c4edb286001b3de05d1.html]]></link>
        <description><![CDATA[
		
		<p>获取一组radio被选中项的值</p>
<p>var item = $('input[@name=items][@checked]').val();<br>
获取select被选中项的文本<br>
var item = $(&quot;select[@name=items] option[@selected]&quot;).text();<br>
select下拉框的第二个元素为当前选中值<br>
$('#select_id')[0].selectedIndex = 1;<br>
radio单选组的第二个元素为当前选中值<br>
$('input[@name=items]').get(1).checked = true;</p>
<p>获取值：</p>
<p>文本框，文本区域：$(&quot;#txt&quot;).attr(&quot;value&quot;)；<br>
多选框checkbox：$(&quot;#checkbox_id&quot;).attr(&quot;value&quot;)；<br>
单选组radio： $(&quot;input[@type=radio][@checked]&quot;).val();<br>
下拉框select： $('#sel').val();</p>
<p>控制表单元素：<br>
文本框，文本区域：$(&quot;#txt&quot;).attr(&quot;value&quot;,'');//清空内容<br>
$(&quot;#txt&quot;).attr(&quot;value&quot;,'11');//填充内容</p>
<p>多选框checkbox： $(&quot;#chk1&quot;).attr(&quot;checked&quot;,'');//不打勾<br>
$(&quot;#chk2&quot;).attr(&quot;checked&quot;,true);//打勾<br>
if($(&quot;#chk1&quot;).attr('checked')==undefined) //判断是否已经打勾</p>
<p>单选组radio： $(&quot;input[@type=radio]&quot;).attr(&quot;checked&quot;,'2');//设置value=2的项目为当前选中项<br>
下拉框select： $(&quot;#sel&quot;).attr(&quot;value&quot;,'-sel3');//设置value=-sel3的项目为当前选中项<br>
$(&quot;&lt;option value='1'&gt;1111&lt;/option&gt;&lt;option value='2'&gt;2222&lt;/option&gt;&quot;).appendTo(&quot;#sel&quot;)//添加下拉框的option<br>
$(&quot;#sel&quot;).empty()；//清空下拉框</p>
<p>//控制表单元素： <br>
//文本框，文本区域： <br>
$(&quot;#text_id&quot;).attr(&quot;value&quot;,'');//清空内容 <br>
$(&quot;#text_id&quot;).attr(&quot;value&quot;,'test');//填充内容 <br>
//多选框checkbox： <br>
$(&quot;#chk_id&quot;).attr(&quot;checked&quot;,'');//未选中的值 <br>
$(&quot;#chk_id&quot;).attr(&quot;checked&quot;,true);//选中的值 <br>
if($(&quot;#chk_id&quot;).attr('checked')==undefined) //判断是否已经选中 <br>
//单选组radio： <br>
$(&quot;input[@type=radio]&quot;).attr(&quot;checked&quot;,'10');//设置value=10的单选按钮为当前选中项 <br>
//下拉框select： <br>
$(&quot;#select_id&quot;).attr(&quot;value&quot;,'test');//设置value=test的项目为当前选中项 <br>
$(&quot;&lt;option value='test'&gt;test&lt;/option&gt;&lt;option value='test2'&gt;test2&lt;/option&gt;&quot;).appendTo(&quot;#select_id&quot;)//添加下拉框的option <br>
$(&quot;#select_id&quot;).empty()；//清空下拉框</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/xiao%5Fwei2008/blog/category/Jquery">Jquery</a>&nbsp;<a href="http://hi.baidu.com/xiao%5Fwei2008/blog/item/e7682c4edb286001b3de05d1.html#comment">查看评论</a>]]></description>
        <pubDate>2009-05-13  13:29</pubDate>
        <category><![CDATA[Jquery]]></category>
        <author><![CDATA[xiao_wei2008]]></author>
		<guid>http://hi.baidu.com/xiao%5Fwei2008/blog/item/e7682c4edb286001b3de05d1.html</guid>
</item>

<item>
        <title><![CDATA[在web.config里面怎么设置FORMS验证：某几个页面可以匿名访问，其他页面都需要登录]]></title>
        <link><![CDATA[http://hi.baidu.com/xiao%5Fwei2008/blog/item/9e3331fbea49936c034f568c.html]]></link>
        <description><![CDATA[
		
		<p>把你不需要验证的所有页放在一个目录下面，但是不用在那个目录下面的WEB.CONFG中对FROMS验证模式进行设置。只要在最上层的WEB.CONFIG中统一设置就可以了.比如下面的例子:<br>
一、设置所有页面都需要验证<br>
&lt;system web&gt;<br>
&lt;authentication mode=&quot;Forms&quot;&gt; <br>
&nbsp;&nbsp;&nbsp;  &lt;forms loginUrl = &quot;Lonin.aspx&quot; name = &quot;.ASPXFORMSAUTH&quot;/&gt;<br>
&lt;/authentication&gt; <br>
&lt;/system web&gt;<br>
二、再特别设置对某个目录下的页面不需要验证(NoAuto为不需要验证的页面所在的目录）<br>
&lt;location path=&quot;NoAuto&quot;&gt;<br>
&nbsp;&nbsp;&nbsp;  &lt;system.web&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;authorization&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;allow users=&quot;*&quot; /&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/authorization&gt;<br>
&nbsp;&nbsp;&nbsp;  &lt;/system.web&gt;<br>
&lt;/location&gt;</p>
<p><br>
一．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  设置web.config相关选项</p>
<p>先启用窗体身份验证和默认登陆页,如下。</p>
<p>&lt;authentication mode=&quot;Forms&quot;&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;forms loginUrl=&quot;default.aspx&quot;&gt;&lt;/forms&gt;</p>
<p>&lt;/authentication&gt;</p>
<p>设置网站可以匿名访问，如下</p>
<p>&lt;authorization&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;allow users=&quot;*&quot; /&gt;</p>
<p>&lt;/authorization&gt;</p>
<p>然后设置跟目录下的admin目录拒绝匿名登陆，如下。注意这个小节在System.Web小节下面。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  &lt;location path=&quot;admin&quot;&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;system.web&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;authorization&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;deny users=&quot;?&quot;&gt;&lt;/deny&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/authorization&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/system.web&gt;</p>
<p>&lt;/location&gt;</p>
<p>把http请求和发送的编码设置成GB2312,否则在取查询字符串的时候会有问题，如下。</p>
<p>&lt;globalization requestEncoding=&quot;gb2312&quot; responseEncoding=&quot;gb2312&quot; /&gt;</p>
<p>设置session超时时间为1分钟，并启用cookieless，如下。</p>
<p>&lt;sessionState mode=&quot;InProc&quot; cookieless=&quot;true&quot; timeout=&quot;1&quot; /&gt;</p>
<p>为了启用页面跟踪，我们先启用每一页的trace，以便我们方便的调试，如下。</p>
<p>&lt;trace enabled=&quot;true&quot; requestLimit=&quot;1000&quot; pageOutput=&quot;true&quot; traceMode=&quot;SortByTime&quot; localOnly=&quot;true&quot; /&gt;</p>
<p>二．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  设置Global.asax文件</p>
<p>处理Application_Start方法，实例化一个哈西表，然后保存在Cache里</p>
<p>&nbsp;&nbsp;&nbsp;  protected void Application_Start(Object sender, EventArgs e)</p>
<p>&nbsp;&nbsp;&nbsp;  {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Hashtable h=new Hashtable();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Context.Cache.Insert(&quot;online&quot;,h);</p>
<p>}</p>
<p>&nbsp;&nbsp;&nbsp;  在Session_End方法里调用LogoutCache()方法，方法源码如下</p>
<p>/// &lt;summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;  /// 清除Cache里当前的用户,主要在Global.asax的Session_End方法和用户注销的方法里调用&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;/summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;  public void LogoutCache()</p>
<p>&nbsp;&nbsp;&nbsp;  {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Hashtable h=(Hashtable)Context.Cache[&quot;online&quot;];</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(h!=null)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(h[Session.SessionID]!=null)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  h.Remove(Session.SessionID);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Context.Cache[&quot;online&quot;]=h;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>}</p>
<p>三．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  设置相关的登陆和注销代码</p>
<p>登陆前调用PreventRepeatLogin()方法，这个方法可以防止用户重复登陆，如果上次用户登陆超时大于1分钟，也就是关闭了所有admin目录下的页面达到60秒以上，就认为上次登陆的用户超时，你就可以登陆了，如果不超过60秒，就会生成一个自定义异常。在Cache[&quot;online&quot;]里保存了一个哈西表,哈西表的key是当前登陆用户的SessionID,而Value是一个ArrayList,这个ArrayList有两个元素,第一个是用户登陆的名字第二个元素是用户登陆的时间,然后在每个admin目录下的页刷新页面的时候会更新当前登陆用户的登陆时间,而只admin目录下有一个页打开着,即使不手工向服务器发送请求,也会自动发送一个请求更新登陆时间,下面我在页面基类里写了一个函数来做到这一点,其实这会增加服务器的负担,但在一定情况下也是一个可行的办法.</p>
<p>/// &lt;summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// 防止用户重复登陆,在用户将要身份验证前使用</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;/summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;param name=&quot;name&quot;&gt;要验证的用户名字&lt;/param&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private void PreventRepeatLogin(string name)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Hashtable h=(Hashtable)Cache[&quot;online&quot;];</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(h!=null)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  IDictionaryEnumerator e1=h.GetEnumerator();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  bool flag=false;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  while(e1.MoveNext())</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if((string)((ArrayList)e1.Value)[0]==name)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  flag=true;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  break;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(flag)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  TimeSpan ts=System.DateTime.Now.Subtract(Convert.ToDateTime(((ArrayList)e1.Value)[1]));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(ts.TotalSeconds&lt;60)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  throw new oa.cls.MyException(&quot;对不起，你输入的账户正在被使用中，如果你是这个账户的真正主人，请在下次登陆时及时的更改你的密码，因为你的密码极有可能被盗窃了!&quot;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  else</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  h.Remove(e1.Key);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  else</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  h=new Hashtable();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ArrayList al=new ArrayList();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  al.Add(name);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  al.Add(System.DateTime.Now);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  h[Session.SessionID]=al;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(Cache[&quot;online&quot;]==null)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Context.Cache.Insert(&quot;online&quot;,h);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }else</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Cache[&quot;Online&quot;]=h;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;  }</p>
<p>用户注销的时候调用上面提到LogoutCache()方法</p>
<p>四．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  设置admin目录下的的所有页面的基类</p>
<p>using System;</p>
<p>using System.Web;</p>
<p>using System.Web.UI;</p>
<p>using System.Web.UI.WebControls;</p>
<p>using System.Web.UI.HtmlControls;</p>
<p>using System.Collections;</p>
<p> </p>
<p> </p>
<p>namespace oa.cls</p>
<p>{</p>
<p>&nbsp;&nbsp;&nbsp;  public class MyBasePage : System.Web.UI.Page</p>
<p>&nbsp;&nbsp;&nbsp;  {</p>
<p><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// 获取本页是否在受保护目录,我这里整个程序在OA的虚拟目录下,受保护的目录是admin目录</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;/summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  protected bool IsAdminDir</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  get</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return Request.FilePath.IndexOf(&quot;/oa/admin&quot;)==0;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// 防止session超时,如果超时就注销身份验证并提示和转向到网站默认页</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;/summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private void PreventSessionTimeout()</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(!this.IsAdminDir) return;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(Session[&quot;User_Name&quot;]==null&amp;&amp;this.IsAdminDir)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  System.Web.Security.FormsAuthentication.SignOut();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.Alert(&quot;登陆超时&quot;,Request.ApplicationPath)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// 每次刷新本页面的时候更新Cache里的登陆时间选项,在下面的OnInit方法里调用.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;/summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private void UpdateCacheTime()</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Hashtable h=(Hashtable)Cache[&quot;online&quot;];</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(h!=null)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ((ArrayList)h[Session.SessionID])[1]=DateTime.Now;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Cache[&quot;Online&quot;]=h;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// 在跟踪里输出一个HashTable的所有元素,在下面的OnInit方法里调用.以便方便的观察缓存数据</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;/summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;param name=&quot;myList&quot;&gt;&lt;/param&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private void TraceValues( Hashtable myList)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  IDictionaryEnumerator myEnumerator = myList.GetEnumerator();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int i=0;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  while ( myEnumerator.MoveNext() )</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Context.Trace.Write( &quot;onlineSessionID&quot;+i, myEnumerator.Key.ToString());</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ArrayList al=(ArrayList)myEnumerator.Value;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Context.Trace.Write( &quot;onlineName&quot;+i, al[0].ToString());</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Context.Trace.Write( &quot;onlineTime&quot;+i,al[1].ToString());</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  TimeSpan ts=System.DateTime.Now.Subtract(Convert.ToDateTime(al[1].ToString()));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Context.Trace.Write(&quot;当前的时间和此登陆时间间隔的秒数&quot;,ts.TotalSeconds.ToString());</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  i++;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// 弹出信息并返回到指定页</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;/summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;param name=&quot;msg&quot;&gt;弹出的消息&lt;/param&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;param name=&quot;url&quot;&gt;指定转向的页面&lt;/param&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  protected void Alert(string msg,string url)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  string scriptString = &quot;&lt;script language=JavaScript&gt;alert(\&quot;&quot;+msg+&quot;\&quot;);location.href=\&quot;&quot;+url+&quot;\&quot;&lt;/script&gt;&quot;;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(!this.IsStartupScriptRegistered(&quot;alert&quot;))</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.RegisterStartupScript(&quot;alert&quot;, scriptString);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// 为了防止常时间不刷新页面造成会话超时,这里写一段脚本,每隔一分钟向本页发送一个请求以维持会话不被超时，这里用的是xmlhttp的无刷新请求</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// 这个方法也在下面的OnInit方法里调用</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;/summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  protected void XmlReLoad()</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  System.Text.StringBuilder htmlstr=new System.Text.StringBuilder();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  htmlstr.Append(&quot;&lt;SCRIPT LANGUAGE=\&quot;JavaScript\&quot;&gt;&quot;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  htmlstr.Append(&quot;function GetMessage(){&quot;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  htmlstr.Append(&quot; var xh=new ActiveXObject(\&quot;Microsoft.XMLHTTP\&quot;);&quot;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  htmlstr.Append(&quot; xh.open(\&quot;get\&quot;,window.location,false);&quot;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  htmlstr.Append(&quot; xh.send();&quot;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  htmlstr.Append(&quot; window.setTimeout(\&quot;GetMessage()\&quot;,60000);&quot;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  htmlstr.Append(&quot;}&quot;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  htmlstr.Append(&quot;window.onload=GetMessage();&quot;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  htmlstr.Append(&quot;&lt;/SCRIPT&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &quot;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(!this.IsStartupScriptRegistered(&quot;xmlreload&quot;))</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.RegisterStartupScript(&quot;alert&quot;, htmlstr.ToString());</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  override protected void OnInit(EventArgs e)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  base.OnInit(e);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.PreventSessionTimeout();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.UpdateCacheTime();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.XmlReLoad();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(this.Cache[&quot;online&quot;]!=null)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.TraceValues((System.Collections.Hashtable)Cache[&quot;online&quot;]);</p>
<p><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;  }</p>
<p><br>
}</p>
<p>五．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  写一个自定义异常类</p>
<p>首先要在跟目录下写一个错误显示页面ShowErr.aspx，这个页面根据传递过来的查询字符串msg的值，在一个Label上显示错误信息。</p>
<p>using System;</p>
<p><br>
namespace oa.cls</p>
<p>{</p>
<p>&nbsp;&nbsp;&nbsp;  /// &lt;summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;  /// MyException 的摘要说明。</p>
<p>&nbsp;&nbsp;&nbsp;  /// &lt;/summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;  public class MyException:ApplicationException</p>
<p>&nbsp;&nbsp;&nbsp;  {</p>
<p><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// 构造函数</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;/summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public MyException():base()</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// 构造函数</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;/summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;param name=&quot;ErrMessage&quot;&gt;异常消息&lt;/param&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public MyException(string Message):base(Message)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  System.Web.HttpContext.Current.Response.Redirect(&quot;~/ShowErr.aspx?msg=&quot;+Message);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// 构造函数</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;/summary&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;param name=&quot;Message&quot;&gt;异常消息&lt;/param&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /// &lt;param name=&quot;InnerException&quot;&gt;引起该异常的异常类&lt;/param&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public MyException(string Message,Exception InnerException):base(Message,InnerException)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>}</p>
<p>六．总结</p>
<p>我发现在Session里保存的值，比如session[&quot;name&quot;]是没有任何向服务器的请求达到1分钟后就会自动丢失,但是session ID是关闭同一进程的浏览器页面后达1分钟后才会丢失并更换的,因为只要你开着浏览器就会有session ID,无论是在url里保存还是在cookies里。不知道这个结论对不对，反正我在设置了session的timeout为1分钟后，session[&quot;name&quot;]的值已经没有了，可是SessionID还是旧的，Global.asax里的Session_End里的代码也没有执行，而身份验证票据也没有丢失。我不知道这三者之间的关系是怎样的，谁先谁后，好像在&lt;authentication&gt;小节可以设置一个timeout属性，不过项目赶的紧，我没时间研究了。</p>
<p>以上这些代码比较零散，我花费了2天的时间才总结出来这套方案，不是很完美，但是暂时只能这样了，不能在这方面浪费很多时间了，大家可以把上面的代码组织到一个类里，然后把方法都修改成静态方法方便调用。</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/xiao%5Fwei2008/blog/category/asp%2Enet%C4%A3%BF%E9%D4%B4%C2%EB">asp.net模块源码</a>&nbsp;<a href="http://hi.baidu.com/xiao%5Fwei2008/blog/item/9e3331fbea49936c034f568c.html#comment">查看评论</a>]]></description>
        <pubDate>2009-03-23  18:17</pubDate>
        <category><![CDATA[asp.net模块源码]]></category>
        <author><![CDATA[xiao_wei2008]]></author>
		<guid>http://hi.baidu.com/xiao%5Fwei2008/blog/item/9e3331fbea49936c034f568c.html</guid>
</item>

<item>
        <title><![CDATA[一点一点学ASP.NET之基础概念——事件 （二）]]></title>
        <link><![CDATA[http://hi.baidu.com/xiao%5Fwei2008/blog/item/42cc8d36b1b649390a55a9de.html]]></link>
        <description><![CDATA[
		
		<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"><span style="color: #0000ff">using</span><span style="color: #000000"> System;<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"></span><span style="color: #0000ff">using</span><span style="color: #000000"> System.Data;<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"></span><span style="color: #0000ff">using</span><span style="color: #000000"> System.Configuration;<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"></span><span style="color: #0000ff">using</span><span style="color: #000000"> System.Collections;<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"></span><span style="color: #0000ff">using</span><span style="color: #000000"> System.Web;<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"></span><span style="color: #0000ff">using</span><span style="color: #000000"> System.Web.Security;<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"></span><span style="color: #0000ff">using</span><span style="color: #000000"> System.Web.UI;<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"></span><span style="color: #0000ff">using</span><span style="color: #000000"> System.Web.UI.WebControls;<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"></span><span style="color: #0000ff">using</span><span style="color: #000000"> System.Web.UI.WebControls.WebParts;<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"></span><span style="color: #0000ff">using</span><span style="color: #000000"> System.Web.UI.HtmlControls;<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" >/**/</span><span ><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif"></span><span style="color: #808080">///</span><span style="color: #008000"> 说明：事件被缓存的示例<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif"></span><span style="color: #808080">///</span><span style="color: #008000"> 作者：文野<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif"></span><span style="color: #808080">///</span><span style="color: #008000"> 联系：stwyhm.cnblogs.com<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif"></span><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080">&lt;/summary&gt;</span></span><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"><span style="color: #0000ff">public</span><span style="color: #000000"> partial </span><span style="color: #0000ff">class</span><span style="color: #000000"> CacheEvent : System.Web.UI.Page<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" ><img src="http://www.cnblogs.com/Images/dot.gif"></span><span ><span style="color: #000000">{<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> Page_Load(</span><span style="color: #0000ff">object</span><span style="color: #000000"> sender, EventArgs e)<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" ><img src="http://www.cnblogs.com/Images/dot.gif"></span><span ><span style="color: #000000">{<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif"><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp; }</span></span><span style="color: #000000"><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" >/**/</span><span ><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000"> 说明：文本框的TextChanged事件，不会自动引发页面Postback<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #008000"><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080">&lt;param name=&quot;sender&quot;&gt;&lt;/param&gt;</span><span style="color: #008000"><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080">&lt;param name=&quot;e&quot;&gt;&lt;/param&gt;</span></span><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> TextBox1_TextChanged(</span><span style="color: #0000ff">object</span><span style="color: #000000"> sender, EventArgs e)<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" ><img src="http://www.cnblogs.com/Images/dot.gif"></span><span ><span style="color: #000000">{<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Write(</span><span style="color: #000000">&quot;</span><span style="color: #000000">引发了文本框的TextChanged事件。&lt;br /&gt;</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp; }</span></span><span style="color: #000000"><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif"><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" >/**/</span><span ><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000"> 说明：下拉框的SelectedIndexChanged事件，不会自动引发页面Postback<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #008000"><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080">&lt;param name=&quot;sender&quot;&gt;&lt;/param&gt;</span><span style="color: #008000"><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080">&lt;param name=&quot;e&quot;&gt;&lt;/param&gt;</span></span><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> DropDownList1_SelectedIndexChanged(</span><span style="color: #0000ff">object</span><span style="color: #000000"> sender, EventArgs e)<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" ><img src="http://www.cnblogs.com/Images/dot.gif"></span><span ><span style="color: #000000">{<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Write(</span><span style="color: #000000">&quot;</span><span style="color: #000000">引发了下拉框SelectedIndexChanged事件。&lt;br /&gt;</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp; }</span></span><span style="color: #000000"><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif"><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" >/**/</span><span ><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000"> 说明：按钮的Click事件，引发页面Postback<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #008000"><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080">&lt;param name=&quot;sender&quot;&gt;&lt;/param&gt;</span><span style="color: #008000"><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080">&lt;param name=&quot;e&quot;&gt;&lt;/param&gt;</span></span><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> Button1_Click(</span><span style="color: #0000ff">object</span><span style="color: #000000"> sender, EventArgs e)<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" ><img src="http://www.cnblogs.com/Images/dot.gif"></span><span ><span style="color: #000000">{<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Write(</span><span style="color: #000000">&quot;</span><span style="color: #000000">引发了按钮的Click事件。&lt;br /&gt;</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp; }</span></span><span style="color: #000000"><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="color: #000000"><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"></span></div>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"> </p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span><img border="0" src="http://images.cnblogs.com/cnblogs_com/stwyhm/一步一步学ASP.NET/事件/Sample1.JPG" width="376" height="282"> <br>
</span><span><font color="#0000ff" face="宋体">&nbsp;&nbsp;&nbsp;&nbsp;</font><span>由上面的示例我们看到，当按钮事件引发Postback时同时被缓存的另两个事件也运行了。<br>
</span><br>
</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="color: blue; font-size: 12pt"><strong>参考资料<br>
</strong><font color="#000000" face="宋体">&nbsp;&nbsp;&nbsp;  </font></span>《<span>ASP.NET</span><span style=" mso-ascii- mso-hansi-">服务器控件高级编程》<br>
&nbsp;&nbsp;&nbsp;  《</span><span>Visual Basic .NET Power Coding》</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span><font face="宋体">&nbsp;&nbsp;&nbsp;  《</font>ASP.NET</span><span style=" mso-ascii- mso-hansi-">服务器控件与组件开发》</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span><font face="宋体">&nbsp;&nbsp;&nbsp;  《</font>ASP.NET</span><span style=" mso-ascii- mso-hansi-">深入解析</span>》<br>
<br>
<strong><font color="#0000ff">本文源码<br>
</font></strong><span><font face="宋体">&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://files.cnblogs.com/stwyhm/一点一点学ASP.NET/事件/EventSample.rar"><span><font color="#000080" face="宋体">下载</font></span></a></font></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"> </p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/xiao%5Fwei2008/blog/category/asp%2Enet%C4%A3%BF%E9%D4%B4%C2%EB">asp.net模块源码</a>&nbsp;<a href="http://hi.baidu.com/xiao%5Fwei2008/blog/item/42cc8d36b1b649390a55a9de.html#comment">查看评论</a>]]></description>
        <pubDate>2009-03-20  14:26</pubDate>
        <category><![CDATA[asp.net模块源码]]></category>
        <author><![CDATA[xiao_wei2008]]></author>
		<guid>http://hi.baidu.com/xiao%5Fwei2008/blog/item/42cc8d36b1b649390a55a9de.html</guid>
</item>

<item>
        <title><![CDATA[一点一点学ASP.NET之基础概念——事件 （一）]]></title>
        <link><![CDATA[http://hi.baidu.com/xiao%5Fwei2008/blog/item/9dd3b41b2962cdf2af5133dd.html]]></link>
        <description><![CDATA[
		
		<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt">.NET Framework</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt">中的事件</span></strong></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"> </p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="color: blue; font-size: 12pt">事件体系结构</span></p>
<p style="text-indent: 21pt; margin: 0cm 0cm 0pt; mso-char-indent-count: 2.0" class="MsoNormal"><span>引发事件的对象叫做事件源。事件源发布它可以引发的事件。事件的类型总是委托类型，这个委托类型的签名定义了处理该事件的方法的签名。定义事件处理程序方法的对象称为事件接收方。事件接收方预订要在事件源上处理的事件事件接收方提供的事件处理程序方法必须与为该事件预订的方法签名一致。事件源利用多播委托跟踪这些事件处理程序方法。当发生重要情况时，事件源引发事件，当事件引发后，事件源自动利用它的金手委托调用在每个事件接收方上指定的事件处理程序方法。</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"> </p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="color: blue; font-size: 12pt">事件和委托的关系</span></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span>一个事件（</span><span>Event</span><span>）是一个对象发送的一个消息，用来表示一个动作发生了。而一个动作可以被用户操作或者其他程序所触发。触发事件的对象被事件发送者（</span><span>Event Sender</span><span>）调用：捕获处理事件的对象被事件接收者（</span><span>Event Receiver</span><span>）调用。</span></p>
<p style="text-indent: 21pt; margin: 0cm 0cm 0pt; mso-char-indent-count: 2.0" class="MsoNormal"><span>在事件通信中，事件的发送者不知道哪个对象或者方法将要去接收／处理发送过去的事件。因而在事件源和事件接收者之间就需要一个中间人存在，这个中间人就叫委托。</span></p>
<p style="text-indent: 21pt; margin: 0cm 0cm 0pt; mso-char-indent-count: 2.0" class="MsoNormal"><span>在使用事件的有效范围里，委托提供一种机制，在事件引发时为类指示要调用的方法。当事件引发时，使用委托作为被调用方法的指针，修改事件的类就不需要了解作为观测程序的类的任何信息。</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"> </p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="color: blue; font-size: 12pt">定义事件</span></p>
<p style="text-indent: 21pt; margin: 0cm 0cm 0pt; mso-char-indent-count: 2.0" class="MsoNormal"><span>在连接事件和其处理程序方法之前，需要定义一个其他对象关心的事件。用</span><span>event</span><span>关键字和指示方法签名的委托对象来定义事件，这个事件的所有事件处理程序都得遵循该委托对象指示的方法签名。</span></p>
<p style="text-indent: 21pt; margin: 0cm 0cm 0pt; mso-char-indent-count: 2.0" class="MsoNormal"> </p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">event</span><span style="color: #000000"> EventHandler Click;</span></div>
<p style="text-indent: 21pt; margin: 0cm 0cm 0pt; mso-char-indent-count: 2.0" class="MsoNormal"> </p>
<p style="text-indent: 21pt; margin: 0cm 0cm 0pt; mso-char-indent-count: 2.0" class="MsoNormal"><span>根据约定，引发事件的行为在</span><span>OnEventName</span><span>方法中发生。</span></p>
<p style="text-indent: 21pt; margin: 0cm 0cm 0pt; mso-char-indent-count: 2.0" class="MsoNormal"> </p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> OnClick(EventArgs e)<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid"><img src="http://www.cnblogs.com/Images/dot.gif"></span><span><span style="color: #000000">{<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000"> 如果为事件注册了处理程序则引发该程序</span><span style="color: #008000"><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000"> (Click </span><span style="color: #000000">!=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">)<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid"><img src="http://www.cnblogs.com/Images/dot.gif"></span><span><span style="color: #000000">{<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Click(</span><span style="color: #0000ff">this</span><span style="color: #000000">, e);<br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</span></span><span style="color: #000000"><br>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</span></span></div>
<p style="text-indent: 21pt; margin: 0cm 0cm 0pt; mso-char-indent-count: 2.0" class="MsoNormal"> </p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span>先进行检查，以确定存在事件，否则值为</span><span>null</span><span>。接着像调用方法一样调用事件来引发它，把对控件或类的</span><span>this</span><span>传递给它，指示它作为事件的发送者，把一个</span><span>EventArgs</span><span>类的新实例作为第二个参数。</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"> </p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="color: blue; font-size: 12pt">使用事件</span></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span>声明了事件和它相应的委托之后，希望对事件作出响应的对象就必须为这个事件添加一个事件处理程序。事件处理程序是一个方法，它的签名和与事件关联的委托相匹配，当事件引发的时候被调用。</span><span> </span></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"> </p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"><span style="color: #000000">Object.EventName </span><span style="color: #000000">+=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> DelegateType(EventHandlerMethod);</span></div>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"> </p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"> </p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span>&nbsp;&nbsp;&nbsp;  注意：当指派多个处理程序给一个事件的时候，处理程序的调用次序是没有保证的。因此不要指望处理程序会以一个特定次序出现。</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"> </p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="color: blue; font-size: 12pt">EventHandler</span><span style="color: blue; font-size: 12pt">与</span><span style="color: blue; font-size: 12pt">EventArgs</span></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span>EventHandler</span><span>是</span><span>.NET Framework</span><span>中预定了一个用于事件的委托，它有两个参数：</span><span>object</span><span>类型参数以及</span><span>System.EventArgs</span><span>类型的参数。</span><span>Object</span><span>对象代表了事件发送者，</span><span>EventArgs</span><span>对象代表了事件包含的事件数据。</span></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span>其实所有的事件处理方法都只有这两个参数，惟一不同的是，其他的某些事件处理方法的第二个参数会是</span><span>System.EventArgs</span><span>的一个子类，用于自定义一些我们需要的事件参数。</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"> </p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt">ASP.NET</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt">事件模型</span></strong></p>
<p style="text-indent: 21pt; margin: 0cm 0cm 0pt; mso-char-indent-count: 2.0" class="MsoNormal"><span>ASP.NET</span><span>的事件驱动是一种基于</span><span>HTTP</span><span>协议的技术，在</span><span>ASP.NET</span><span>中事件的触发和事件的处理是分别在客户端和服务器端进行的。一个事件在客户端被触发之后，会通过</span><span>HTTP</span><span>协议以</span><span>POST</span><span>的方式发送到服务器端，而服务器端则通过</span><span>ASP.NET</span><span>页面架构来进行相应的处理和反馈。</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"> </p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="color: blue; font-size: 12pt">缓存事件<br>
&nbsp;&nbsp;&nbsp;  </span><span>ASP.NET Framework</span><span>提供给服务器端事件不是很多，因为事件驱动模型机制的实现是在客户端和服务器端分别实现的，之间需要通过</span><span>HTTP</span><span>协议方式来传递事件信息，因而如果频繁地触发各类事件会对整个</span><span>Web</span><span>站点产生很大的流量压力（如</span><span>OnMouseOver</span><span>事件）。但是，有些事件虽然也会频繁的触发但是必须提供（如</span><span>Change</span><span>事件），对于这种情况，</span><span>ASP.NET Framework</span><span>提供了一个折衷的办法，就是对于这类事件在触发时，不是立即将事件信息发送到服务器，而是缓存在客户端，等到再一次的事件信息被发送到服务器端时一同发送回去。因此，当这些缓存着的事件以及刚刚被触发的事件在服务器端被接收时，</span><span>ASP.NET Framework</span><span>不会按照特定的顺序去解释执行处理这些事件。<br>
</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span><span><font face="宋体"><a href="http://files.cnblogs.com/stwyhm/一点一点学ASP.NET/事件/EventSample.rar"><br>
</a></font></span></span></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/xiao%5Fwei2008/blog/category/asp%2Enet%C4%A3%BF%E9%D4%B4%C2%EB">asp.net模块源码</a>&nbsp;<a href="http://hi.baidu.com/xiao%5Fwei2008/blog/item/9dd3b41b2962cdf2af5133dd.html#comment">查看评论</a>]]></description>
        <pubDate>2009-03-20  14:25</pubDate>
        <category><![CDATA[asp.net模块源码]]></category>
        <author><![CDATA[xiao_wei2008]]></author>
		<guid>http://hi.baidu.com/xiao%5Fwei2008/blog/item/9dd3b41b2962cdf2af5133dd.html</guid>
</item>

<item>
        <title><![CDATA[一点一点学ASP.NET之基础概念——委托 （二）]]></title>
        <link><![CDATA[http://hi.baidu.com/xiao%5Fwei2008/blog/item/ca2340299087d0f699250ad3.html]]></link>
        <description><![CDATA[
		
		<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style=" color: blue; font-size: 12pt; mso-ascii- mso-hansi-">委托示例</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt"></span></strong></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style=" mso-ascii- mso-hansi-">这是一个我自认为比较经典的委托示例（给排序算法传递一个动态比较的函数）。</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span> </span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">using</span><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> System;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">using</span><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> System.Collections.Generic;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">using</span><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> System.Text;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> </span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">namespace</span><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> MyDelegateTest</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: gray">///</span><span style="color: green"> </span><span style="color: gray">&lt;summary&gt;</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: gray">///</span><span style="color: green"> </span></span><span style=" color: green; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">说明：给排序算法传递一个动态比较函数的委托示例<span></span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: gray">///</span><span style="color: green"> </span></span><span style=" color: green; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">作者：文野<span></span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: gray">///</span><span style="color: green"> </span></span><span style=" color: green; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">联系：<span>stwyhm.cnblogs.com</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: gray">///</span><span style="color: green"> </span><span style="color: gray">&lt;/summary&gt;</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: green">// </span></span><span style=" color: green; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">进行排序的委托<span></span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">delegate</span> <span style="color: blue">bool</span> <span style="color: teal">Compare</span>(<span style="color: blue">int</span> left, <span style="color: blue">int</span> right);</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> </span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">class</span> <span style="color: teal">DelegateSample</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">private</span> <span style="color: blue">int</span>[] items;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> </span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">int</span>[] Items</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">set</span> { items = <span style="color: blue">value</span>; }</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">get</span> { <span style="color: blue">return</span> items; }</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> </span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: green">// </span></span><span style=" color: green; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">比大<span></span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">bool</span> Greater(<span style="color: blue">int</span> left, <span style="color: blue">int</span> right)</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">return</span> left &gt; right;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> </span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: green">// </span></span><span style=" color: green; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">比小<span></span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">bool</span> Less(<span style="color: blue">int</span> left, <span style="color: blue">int</span> right)</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">return</span> !Greater(left, right);</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> </span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">void</span> Sort(<span style="color: teal">Compare</span> compare)</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">for</span> (<span style="color: blue">int</span> i = 0; i &lt; items.Length-1; i++)</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">for</span> (<span style="color: blue">int</span> j = i + 1; j &lt; items.Length; j++)</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">if</span> (compare(items[i], items[j]))</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 6">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">int</span> tmp = items[i];</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 6">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>items[i] = items[j];</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 6">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>items[j] = tmp;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">}</span></p>
<span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"></span> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/xiao%5Fwei2008/blog/category/asp%2Enet%C4%A3%BF%E9%D4%B4%C2%EB">asp.net模块源码</a>&nbsp;<a href="http://hi.baidu.com/xiao%5Fwei2008/blog/item/ca2340299087d0f699250ad3.html#comment">查看评论</a>]]></description>
        <pubDate>2009-03-20  14:22</pubDate>
        <category><![CDATA[asp.net模块源码]]></category>
        <author><![CDATA[xiao_wei2008]]></author>
		<guid>http://hi.baidu.com/xiao%5Fwei2008/blog/item/ca2340299087d0f699250ad3.html</guid>
</item>

<item>
        <title><![CDATA[一点一点学ASP.NET之基础概念——委托 （一）]]></title>
        <link><![CDATA[http://hi.baidu.com/xiao%5Fwei2008/blog/item/5f0476d70151a7d5a144dfd3.html]]></link>
        <description><![CDATA[
		
		<strong><font size="3"><font color="#0000ff"><font face="宋体">委托的概念<span style="color: blue; font-size: 12pt"></span></font></font></font></strong>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style=" mso-ascii- mso-hansi-">委托实际上是类（一个貌似函数一样的类），我们已经使用函数指针很多年了&mdash;&mdash;函数指针也被称为过程类型，但是它们的实现都不是类。它们是单独的函数指针的简单实例。委托是包含这些功能的类，委托类通过保留的列表来确定某些事物是否已经指派给了委托，这种算法可以理解为：&ldquo;对于内部列表中的每一个回调函数，都调用函数&rdquo;。委托除了支持回调函数外，还可以通过该列表来实现多播（委托链）。</span></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style=" mso-ascii- mso-hansi-">说白了，就是我们把一批具有相同特征的方法，通过建立与具有同样相同特征的委托的一个实例来进行传递，以使其它地方能对这些方法进行调用。即把方法当作参数进行传递（浅显的认识，勿笑）。</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span> </span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style=" color: blue; font-size: 12pt; mso-ascii- mso-hansi-">初识委托</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt"></span></strong></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style=" mso-ascii- mso-hansi-">示例</span><span>1</span><span style=" mso-ascii- mso-hansi-">：</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">using</span><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> System;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">using</span><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> System.Collections.Generic;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">using</span><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> System.Text;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">using</span><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> System.Web;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> </span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">namespace</span><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> MyDelegateTest</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: gray">///</span><span style="color: green"> </span><span style="color: gray">&lt;summary&gt;</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: gray">///</span><span style="color: green"> </span></span><span style=" color: green; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">说明：一个简单的委托示例<span></span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: gray">///</span><span style="color: green"> </span></span><span style=" color: green; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">作者：文野<span></span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: gray">///</span><span style="color: green"> </span></span><span style=" color: green; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">联系：<span>stwyhm.cnblogs.com</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: gray">///</span><span style="color: green"> </span><span style="color: gray">&lt;/summary&gt;</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" color: gray; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> </span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: green">// </span></span><span style=" color: green; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">新建一个用以输出消息的委托<span></span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">delegate</span> <span style="color: blue">void</span> <span style="color: teal">WriteMessage</span>();</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">class</span> <span style="color: teal">WriteToWeb</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: green">// </span></span><span style=" color: green; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">一个输出消息的静态方法<span></span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">static</span> <span style="color: blue">void</span> StaticWrite()</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: teal">HttpContext</span>.Current.Response.Write(<span style="color: maroon">&quot;</span></span><span style=" color: maroon; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">委托调用了一个静态方法。<span>&lt;br /&gt;&quot;</span></span><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">);</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> </span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: green">// </span></span><span style=" color: green; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">一个输出消息的类实例方法<span></span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">void</span> Write()</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: teal">HttpContext</span>.Current.Response.Write(<span style="color: maroon">&quot;</span></span><span style=" color: maroon; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">委托调用了一个类实例方法。<span>&lt;br /&gt;&quot;</span></span><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">);</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">}</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style=" mso-ascii- mso-hansi-">调用：</span></p>
<p style="text-align: left; text-indent: 21pt; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">protected</span><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> <span style="color: blue">void</span> Page_Load(<span style="color: blue">object</span> sender, <span style="color: teal">EventArgs</span> e)</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: green">// </span></span><span style=" color: green; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">新建一个委托，回调函数是一个静态方法<span></span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: teal">WriteMessage</span> wm = <span style="color: blue">new</span> <span style="color: teal">WriteMessage</span>(<span style="color: teal">WriteToWeb</span>.StaticWrite);</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> </span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: teal">WriteToWeb</span> w = <span style="color: blue">new</span> <span style="color: teal">WriteToWeb</span>();</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: green">// </span></span><span style=" color: green; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">新建一个委托并与加到先前建立的委托组成委托链，回调函数是一个类实例方法<span></span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>wm += <span style="color: blue">new</span> <span style="color: teal">WriteMessage</span>(w.Write);</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> </span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: green">// </span></span><span style=" color: green; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">执行委托链上所有的回调函数<span></span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>wm();</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span><img border="0" src="http://images.cnblogs.com/cnblogs_com/stwyhm/一步一步学ASP.NET/委托/sample1.JPG" width="389" height="289"> </span></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style=" mso-ascii- mso-hansi-">上面的示例程序首先建立了一个简单得不能再简单的用以输出的委托，下面的类中有两个与委托签名一致的方法（一个静态方法，一个类实例方法）。下面的调用过程首先建立了一个使用回调静态方法的委托，其后又建立了一个使用类实例方法的委托并与先前的委托组成了一个委托链，最后执行委托链上所有的方法。</span></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style=" mso-ascii- mso-hansi-">由此可见，委托最简单的理解就是利用与方法签名一致的委托，可以把方法当作参数一样来传递，无论是静态方法还是类实例方法。</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span> </span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style=" color: blue; font-size: 12pt; mso-ascii- mso-hansi-">委托的秘密<br>
<img border="0" src="http://images.cnblogs.com/cnblogs_com/stwyhm/一步一步学ASP.NET/委托/ClassView.JPG"><br>
<br>
</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt"></span></strong></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"> </p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style=" mso-ascii- mso-hansi-">从上面的类视图中我们看到，对委托的定义最终被编译成一个类，这个类中定义有</span><span>4</span><span style=" mso-ascii- mso-hansi-">种方法：构造器，</span><span>Invoke</span><span style=" mso-ascii- mso-hansi-">，</span><span>BeginInvoke</span><span style=" mso-ascii- mso-hansi-">，</span><span>EndInvoke</span><span style=" mso-ascii- mso-hansi-">。</span></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style=" mso-ascii- mso-hansi-">所有的委托都继承自</span><span>MulticastDelegate</span><span style=" mso-ascii- mso-hansi-">，而</span><span>MulticastDelegate</span><span style=" mso-ascii- mso-hansi-">又继续至</span><span>Delegate</span><span style=" mso-ascii- mso-hansi-">。这样我们定义的委托自然也就继承了</span><span>MulticastDelegate</span><span style=" mso-ascii- mso-hansi-">的字段、属性和方法。在继承得到的所有成员中，有</span><span>3</span><span style=" mso-ascii- mso-hansi-">个最重要的字段：</span></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span>1</span><span style=" mso-ascii- mso-hansi-">、</span><span>_target</span><span style=" mso-ascii- mso-hansi-">：指向调用回调函数时应该操作的对象。该字段用于实例方法的回调。</span></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span>2</span><span style=" mso-ascii- mso-hansi-">、</span><span>_methodPtr</span><span style=" mso-ascii- mso-hansi-">：一个内部的整数值，</span><span>CLR</span><span style=" mso-ascii- mso-hansi-">用它来识别回调的方法。</span></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span>3</span><span style=" mso-ascii- mso-hansi-">、</span><span>_prev</span><span style=" mso-ascii- mso-hansi-">：指向另一个委托对象。</span></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style=" mso-ascii- mso-hansi-">当编译器知道我们在构造的是一个委托时，它会分析源代码来确定要引用哪个对象和方法。其中对象引用会被传递给</span><span>_target(</span><span style=" mso-ascii- mso-hansi-">对于静态方法，</span><span>_target</span><span style=" mso-ascii- mso-hansi-">被置为</span><span>null)</span><span style=" mso-ascii- mso-hansi-">，一个特殊的标识方法的</span><span>Int32</span><span style=" mso-ascii- mso-hansi-">值会被传递给</span><span>_methodPtr</span><span style=" mso-ascii- mso-hansi-">，</span><span>_prev</span><span style=" mso-ascii- mso-hansi-">在构造器中被置为</span><span>null</span><span style=" mso-ascii- mso-hansi-">，它被用于在委托链中记录下一个委托的引用。</span></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style=" mso-ascii- mso-hansi-">每个委托对象实际上是对方法及其调用操作的一个包装，</span><span>MulticastDelegate</span><span style=" mso-ascii- mso-hansi-">中定义了两个只读属性，</span><span>Target</span><span style=" mso-ascii- mso-hansi-">和</span><span>Method</span><span style=" mso-ascii- mso-hansi-">，</span><span>Target</span><span style=" mso-ascii- mso-hansi-">（其实就是前面的</span><span>_target</span><span style=" mso-ascii- mso-hansi-">字段）属性返回一个方法回调时操作的对象的引用，</span><span>Method</span><span style=" mso-ascii- mso-hansi-">属性返回一个标识回调方法的</span><span>System.Reflection.MethodInfo</span><span style=" mso-ascii- mso-hansi-">对象。</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span> </span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style=" color: blue; font-size: 12pt; mso-ascii- mso-hansi-">委托链</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt"></span></strong></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style=" mso-ascii- mso-hansi-">前面介绍过</span><span>MulticastDelegate</span><span style=" mso-ascii- mso-hansi-">中有一个</span><span>_prev</span><span style=" mso-ascii- mso-hansi-">的私有字段，这个字段指向另一个</span><span>MulticastDelegate</span><span style=" mso-ascii- mso-hansi-">对象的引用，这样就实现了委托链（其实与我们在学链表时的实现方式是一致的）。</span></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style=" mso-ascii- mso-hansi-">当委托链表被调用时，它首先会调用委托中在其前面的委托对象，这里如果被调的回调方法具有返回值，将被丢失，委托链只会返回最后一次调用回调方法的返回值。</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span> </span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span></span></span><span> </span>
<p> </p>
</p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style=" mso-ascii- mso-hansi-"><a href="http://files.cnblogs.com/stwyhm/一点一点学ASP.NET/委托/MyDelegateTest.rar"></a></span></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/xiao%5Fwei2008/blog/category/asp%2Enet%C4%A3%BF%E9%D4%B4%C2%EB">asp.net模块源码</a>&nbsp;<a href="http://hi.baidu.com/xiao%5Fwei2008/blog/item/5f0476d70151a7d5a144dfd3.html#comment">查看评论</a>]]></description>
        <pubDate>2009-03-20  14:22</pubDate>
        <category><![CDATA[asp.net模块源码]]></category>
        <author><![CDATA[xiao_wei2008]]></author>
		<guid>http://hi.baidu.com/xiao%5Fwei2008/blog/item/5f0476d70151a7d5a144dfd3.html</guid>
</item>

<item>
        <title><![CDATA[一点一点学ASP.NET之基础概念——HTTP运行期与页面执行模型]]></title>
        <link><![CDATA[http://hi.baidu.com/xiao%5Fwei2008/blog/item/1512c33831217fcad56225d2.html]]></link>
        <description><![CDATA[
		
		<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt">HTTP</span></strong><strong style="mso-bidi-font-weight: normal"><span style=" color: blue; font-size: 12pt; mso-ascii- mso-hansi-">运行期</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt"></span></strong></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span>HTTP</span><span style=" mso-ascii- mso-hansi-">运行期处理客户端应用程序（例如</span><span>Web</span><span style=" mso-ascii- mso-hansi-">浏览器）进入的一个</span><span>Web</span><span style=" mso-ascii- mso-hansi-">请求，通过处理它的应用程序的适当组件路由请求，然后产生响应并发回提出请求的客户端应用程序。</span></p>
<p style="text-indent: 21pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style=" mso-ascii- mso-hansi-">进入的</span><span>HTTP Web</span><span style=" mso-ascii- mso-hansi-">请求最先由</span><span>IIS Web</span><span style=" mso-ascii- mso-hansi-">服务器接收到，它在此请求基于</span><span>ASP.NET</span><span style=" mso-ascii- mso-hansi-">已注册处理的扩展名传送到</span><span>ASP.NET ISAPI</span><span style=" mso-ascii- mso-hansi-">上。</span></p>
<p style="text-indent: 21pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span>HTTP</span><span style=" mso-ascii- mso-hansi-">运行期首先创建一个</span><span>HttpContext</span><span style=" mso-ascii- mso-hansi-">对象的实例，它包含了当前正在处理的请求信息，接着创建在处理逻辑中涉及到的所有其他组件都可以使用的上下文对象。</span><span>HttpContext</span><span style=" mso-ascii- mso-hansi-">实例提供了对请求对象（</span><span>HttpRequest</span><span style=" mso-ascii- mso-hansi-">类的实例）和响应对象（</span><span>HttpResponse</span><span style=" mso-ascii- mso-hansi-">类的实例）的访问。</span></p>
<p style="text-indent: 21pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span>HTTP</span><span style=" mso-ascii- mso-hansi-">运行期集成由称为</span><span>HTTP</span><span style=" mso-ascii- mso-hansi-">模块（</span><span>HTTP Module</span><span style=" mso-ascii- mso-hansi-">）的组件构成的处理管线，用于执行请求预处理动作（如：高速缓存的查询和授权）和后处理动作（如：更新调整缓存）。这些组件实现</span><span>IHttpModule</span><span style=" mso-ascii- mso-hansi-">接口。在管线中，每个模块处理不同的全局应用层次和特定请求事件来执行其逻辑。</span></p>
<p style="text-indent: 21pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span>HTTP</span><span style=" mso-ascii- mso-hansi-">运行期基于请求的</span><span>URL</span><span style=" mso-ascii- mso-hansi-">还选择一个</span><span>HTTP</span><span style=" mso-ascii- mso-hansi-">处理程序（实现</span><span>IHttpHandler</span><span style=" mso-ascii- mso-hansi-">接口的组件）或</span><span>HTTP</span><span style=" mso-ascii- mso-hansi-">处理程序工厂（实现</span><span>IHttpHandlerFactory</span><span style=" mso-ascii- mso-hansi-">接口的组件）来完成引入请求的实际处理过程。处理程序用</span><span>HttpContext</span><span style=" mso-ascii- mso-hansi-">对象来收集请求信息、并写出响应的结果。</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span></span></p>
<p style="text-align: center; margin: 0cm 0cm 0pt" class="MsoNormal" align="center"><span style=" mso-ascii- mso-hansi-"><img border="0" src="http://images.cnblogs.com/cnblogs_com/stwyhm/01.jpg" width="666" height="768"><br>
图</span><span>1</span><span style=" mso-ascii- mso-hansi-">：</span><span>ASP.NET Web </span><span style=" mso-ascii- mso-hansi-">应用程序中的请求处理过程</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span> </span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style=" color: blue; font-size: 12pt; mso-ascii- mso-hansi-">一个</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt">HTTP</span></strong><strong style="mso-bidi-font-weight: normal"><span style=" color: blue; font-size: 12pt; mso-ascii- mso-hansi-">请求的处理过程</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt"></span></strong></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style=" mso-ascii- mso-hansi-">当一个</span><span>HTTP</span><span style=" mso-ascii- mso-hansi-">请求被送入</span><span>HttpRuntime</span><span style=" mso-ascii- mso-hansi-">之后，这个</span><span>HTTP</span><span style=" mso-ascii- mso-hansi-">请求会继续被送入到一个被称为</span><span>HttpApplicationFactory</span><span style=" mso-ascii- mso-hansi-">的容器中。而这个窗口会给出一个</span><span>HttpApplication</span><span style=" mso-ascii- mso-hansi-">实例来处理传递进来的</span><span>HTTP</span><span style=" mso-ascii- mso-hansi-">请求，而后这个</span><span>HTTP</span><span style=" mso-ascii- mso-hansi-">请求会依次进入如下几个容器中：</span></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span>HttpModule </span><span style=" mso-ascii- mso-hansi-">&mdash;&mdash;</span><span>&gt; HttpHandler Factory </span><span style=" mso-ascii- mso-hansi-">&mdash;&mdash;</span><span>&gt; HttpHandler</span></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style=" mso-ascii- mso-hansi-">当系统内部的</span><span>HttpHandler</span><span style=" mso-ascii- mso-hansi-">的</span><span>ProcessResquest</span><span style=" mso-ascii- mso-hansi-">的方法处理完毕之后，整个</span><span>Http Request</span><span style=" mso-ascii- mso-hansi-">就被处理完成了，客户端也就得到相应的结果了。</span></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span> </span></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style=" mso-ascii- mso-hansi-">一个完整的</span><span>HTTP</span><span style=" mso-ascii- mso-hansi-">请求在</span><span>ASP.NET Framework</span><span style=" mso-ascii- mso-hansi-">的处理过程如下：</span></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span>HttpRequest </span><span style=" mso-ascii- mso-hansi-">&mdash;&mdash;</span><span>&gt; inetinfo.exe </span><span style=" mso-ascii- mso-hansi-">&mdash;&mdash;</span><span>&gt; ASPNET_ISAPI.dll </span><span style=" mso-ascii- mso-hansi-">&mdash;&mdash;</span><span>&gt; Http Pipeline </span><span style=" mso-ascii- mso-hansi-">&mdash;&mdash;</span><span>&gt; ASPNET_WP.exe </span><span style=" mso-ascii- mso-hansi-">&mdash;&mdash;</span><span>&gt; HttpRuntime </span><span style=" mso-ascii- mso-hansi-">&mdash;&mdash;</span><span>&gt; HttpApplication Factory<span style="mso-spacerun: yes">  </span></span><span style=" mso-ascii- mso-hansi-">&mdash;&mdash;</span><span>&gt; HttpApplication<span style="mso-spacerun: yes">  </span></span><span style=" mso-ascii- mso-hansi-">&mdash;&mdash;</span><span>&gt; HttpModule </span><span style=" mso-ascii- mso-hansi-">&mdash;&mdash;</span><span>&gt; HttpHandler Factory<span style="mso-spacerun: yes">  </span></span><span style=" mso-ascii- mso-hansi-">&mdash;&mdash;</span><span>&gt; HttpHandler<span style="mso-spacerun: yes">  </span></span><span style=" mso-ascii- mso-hansi-">&mdash;&mdash;</span><span>&gt; HttpHandler.ProcessRequest()</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span> </span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style=" color: blue; font-size: 12pt; mso-ascii- mso-hansi-">页面执行模型</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt"></span></strong></p>
<p style="text-indent: 21pt; margin: 0cm 0cm 0pt; mso-char-indent-count: 2.0" class="MsoNormal"><span style=" mso-ascii- mso-hansi-">页面执行模型由页面</span><span>HTTP</span><span style=" mso-ascii- mso-hansi-">处理程序工厂开始，它注册</span><span>HTTP</span><span style=" mso-ascii- mso-hansi-">运行期以为所有</span><span>.aspx</span><span style=" mso-ascii- mso-hansi-">文件处理请求。页面处理程序工厂负责创建一个</span><span>Page</span><span style=" mso-ascii- mso-hansi-">对象的实例，这是将最终处理请求所生成响应结果的</span><span>HTTP</span><span style=" mso-ascii- mso-hansi-">处理程序。</span></p>
<p style="text-indent: 21pt; margin: 0cm 0cm 0pt; mso-char-indent-count: 2.0" class="MsoNormal"><span style=" mso-ascii- mso-hansi-">首先页面处理程序工厂尝试在与请求的</span><span>.aspx</span><span style=" mso-ascii- mso-hansi-">文件相关的</span><span>.NET</span><span style=" mso-ascii- mso-hansi-">高速缓存内查找以前编译过的页面类。当查找失败时，就像第一次请求一样，处理程序工厂将读取和解析文件，并创建一棵解析树（</span><span>parse tree</span><span style=" mso-ascii- mso-hansi-">）。解析树类似于控件树，但是并不包含控件，解析树包含称为控件生成器（</span><span>control builder</span><span style=" mso-ascii- mso-hansi-">）的对象实例。控件生成器包含了在解析过程期间收集的相关控件信息。然后通过</span><span>Page</span><span style=" mso-ascii- mso-hansi-">指令中的</span><span>Language attribute</span><span style=" mso-ascii- mso-hansi-">，用与页面相关的语言把解析树转变为代码。然后，页面处理程序工厂调用适当的编译程序，动态地编译从</span><span>Page</span><span style=" mso-ascii- mso-hansi-">中得到的类，页面处理程序工厂还将新建的类放置到</span><span>ASP.NET</span><span style=" mso-ascii- mso-hansi-">调整缓存中，并且把高速缓存记录和文件相关性关联起来。文件相关性监视</span><span>.aspx</span><span style=" mso-ascii- mso-hansi-">文件做出的变化，并保证任何变化都自动地使高速缓存记录无效，在下次请求时这些记录将再次解析修改过的文件。</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"> </p>
<p style="text-align: center; margin: 0cm 0cm 0pt" class="MsoNormal" align="center"><span style=" mso-ascii- mso-hansi-"><img border="0" src="http://images.cnblogs.com/cnblogs_com/stwyhm/02.jpg" width="740" height="731"><br>
图</span><span>2</span><span style=" mso-ascii- mso-hansi-">：页面如何处理请求</span></p>
<p> </p>
<p><strong><span><span style=" color: blue; font-size: 12pt; mso-ascii- mso-hansi-">参考资料<br>
</span></span></strong><span><span>&nbsp;&nbsp;&nbsp;  </span>《</span><span>ASP.NET</span><span>服务器控件与组件开发》<br>
</span><span>&nbsp;&nbsp;&nbsp;  《</span><span>ASP.NET</span><span>深入解析》<br>
</span></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/xiao%5Fwei2008/blog/category/asp%2Enet%C4%A3%BF%E9%D4%B4%C2%EB">asp.net模块源码</a>&nbsp;<a href="http://hi.baidu.com/xiao%5Fwei2008/blog/item/1512c33831217fcad56225d2.html#comment">查看评论</a>]]></description>
        <pubDate>2009-03-20  14:20</pubDate>
        <category><![CDATA[asp.net模块源码]]></category>
        <author><![CDATA[xiao_wei2008]]></author>
		<guid>http://hi.baidu.com/xiao%5Fwei2008/blog/item/1512c33831217fcad56225d2.html</guid>
</item>

<item>
        <title><![CDATA[一点一点学ASP.NET之基础概念——HttpHandler (二)]]></title>
        <link><![CDATA[http://hi.baidu.com/xiao%5Fwei2008/blog/item/6edb4cd1875e89309b5027d1.html]]></link>
        <description><![CDATA[
		
		<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span>示例</span><span>2</span><span>：</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">using</span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"> System;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">using</span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"> System.Collections.Generic;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">using</span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"> System.Text;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">using</span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"> System.Web;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">namespace</span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"> MyHandler</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">class</span> <span style="color: teal">MyHandlerFactory</span> : <span style="color: teal">IHttpHandlerFactory</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>#region</span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"> IHttpHandlerFactory </span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">成员</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: teal">IHttpHandler</span> GetHandler(<span style="color: teal">HttpContext</span> context, <span style="color: blue">string</span> requestType, <span style="color: blue">string</span> url, <span style="color: blue">string</span> pathTranslated)</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">string</span> fname = url.Substring(url.IndexOf(<span style="color: maroon">'/'</span>) + 1);</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">while</span> (fname.IndexOf(<span style="color: maroon">'/'</span>) != -1)</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>fname = fname.Substring(fname.IndexOf(<span style="color: maroon">'/'</span>) + 1);</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">string</span> cname = fname.Substring(0, fname.IndexOf(<span style="color: maroon">'.'</span>));</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">string</span> className = <span style="color: maroon">&quot;MyHandler.&quot;</span> + cname;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">object</span> h = <span style="color: blue">null</span>;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">try</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: green">// </span></span><span style="color: green; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">采用动态反射机制创建相应的<span>IHttpHandler</span>实现类。</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>h = <span style="color: teal">Activator</span>.CreateInstance(<span style="color: teal">Type</span>.GetType(className));</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">catch</span> (<span style="color: teal">Exception</span> e)</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">throw</span> <span style="color: blue">new</span> <span style="color: teal">HttpException</span>(<span style="color: maroon">&quot;</span></span><span style="color: maroon; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">工厂不能为类型<span>&quot;</span></span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">+cname+<span style="color: maroon">&quot;</span></span><span style="color: maroon; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">创建实例。<span>&quot;</span></span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">,e);</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">return</span> (<span style="color: teal">IHttpHandler</span>)h;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">void</span> ReleaseHandler(<span style="color: teal">IHttpHandler</span> handler)</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>#endregion</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">class</span> <span style="color: teal">Handler1</span> : <span style="color: teal">IHttpHandler</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>#region</span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"> IHttpHandler </span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">成员</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">bool</span> IsReusable</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">get</span> { <span style="color: blue">return</span> <span style="color: blue">true</span>; }</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">void</span> ProcessRequest(<span style="color: teal">HttpContext</span> context)</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>context.Response.Write(<span style="color: maroon">&quot;&lt;html&gt;&lt;body&gt;&lt;h1&gt;</span></span><span style="color: maroon; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">来自<span>Handler1</span>的信息。<span>&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;&quot;</span></span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">);</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>#endregion</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">class</span> <span style="color: teal">Handler2</span> : <span style="color: teal">IHttpHandler</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>#region</span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"> IHttpHandler </span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">成员</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">bool</span> IsReusable</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">get</span> { <span style="color: blue">return</span> <span style="color: blue">true</span>; }</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">void</span> ProcessRequest(<span style="color: teal">HttpContext</span> context)</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>context.Response.Write(<span style="color: maroon">&quot;&lt;html&gt;&lt;body&gt;&lt;h1&gt;</span></span><span style="color: maroon; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">来自<span>Handler2</span>的信息。<span>&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;&quot;</span></span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">);</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>#endregion</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span><img border="0" width="513" height="299" src="http://images.cnblogs.com/cnblogs_com/stwyhm/HttpHandler/Sample2.JPG"><br>
<img border="0" width="513" height="299" src="http://images.cnblogs.com/cnblogs_com/stwyhm/HttpHandler/Sample3.JPG"><br>
<br>
</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt">参考资料</span></strong></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span>《</span><span>ASP.NET</span><span>深入解析》<br>
</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span><br>
</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt">本文源码：</span></strong></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span><a href="http://files.cnblogs.com/stwyhm/HttpHandler/MyHttpHandlerTest.rar"><span><font color="#000080">下载</font></span></a></span></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/xiao%5Fwei2008/blog/category/asp%2Enet%C4%A3%BF%E9%D4%B4%C2%EB">asp.net模块源码</a>&nbsp;<a href="http://hi.baidu.com/xiao%5Fwei2008/blog/item/6edb4cd1875e89309b5027d1.html#comment">查看评论</a>]]></description>
        <pubDate>2009-03-20  14:18</pubDate>
        <category><![CDATA[asp.net模块源码]]></category>
        <author><![CDATA[xiao_wei2008]]></author>
		<guid>http://hi.baidu.com/xiao%5Fwei2008/blog/item/6edb4cd1875e89309b5027d1.html</guid>
</item>

<item>
        <title><![CDATA[一点一点学ASP.NET之基础概念——HttpHandler (一)]]></title>
        <link><![CDATA[http://hi.baidu.com/xiao%5Fwei2008/blog/item/63d2476d0e8b82f3431694d1.html]]></link>
        <description><![CDATA[
		
		<strong><font size="3"><font color="#0000ff"><font face="宋体">概述<span style="color: blue; font-size: 12pt"></span></font></font></font></strong>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span>HttpHandler</span><span style=" mso-ascii- mso-hansi-">是一个</span><span>HTTP</span><span style=" mso-ascii- mso-hansi-">请求的真正处理中心，也正是在这个</span><span>HttpHandler</span><span style=" mso-ascii- mso-hansi-">容器中，</span><span>ASP.NET Framework</span><span style=" mso-ascii- mso-hansi-">才真正地对客户端请求的服务器页面做出编译和执行，并将处理过后的信息附加在</span><span>HTTP</span><span style=" mso-ascii- mso-hansi-">请求信息流中再次返回到</span><span>HttpModule</span><span style=" mso-ascii- mso-hansi-">中。</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span> </span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt">IHttpHandler</span></strong><strong style="mso-bidi-font-weight: normal"><span style=" color: blue; font-size: 12pt; mso-ascii- mso-hansi-">是什么</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt"></span></strong></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span>IHttpHandler</span><span style=" mso-ascii- mso-hansi-">定义了如果要实现一个</span><span>HTTP</span><span style=" mso-ascii- mso-hansi-">请求的处理所必需实现的一些系统约定。</span><span>HttpHandler</span><span style=" mso-ascii- mso-hansi-">与</span><span>HttpModule</span><span style=" mso-ascii- mso-hansi-">不同，一旦定义了自己的</span><span>HttpHandler</span><span style=" mso-ascii- mso-hansi-">类，那么它对系统的</span><span>HttpHandler</span><span style=" mso-ascii- mso-hansi-">的关系将是&ldquo;覆盖&rdquo;关系。</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span> </span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt">IHttpHandler</span></strong><strong style="mso-bidi-font-weight: normal"><span style=" color: blue; font-size: 12pt; mso-ascii- mso-hansi-">如何处理</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt">HTTP</span></strong><strong style="mso-bidi-font-weight: normal"><span style=" color: blue; font-size: 12pt; mso-ascii- mso-hansi-">请求</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt"></span></strong></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style=" mso-ascii- mso-hansi-">当一个</span><span>HTTP</span><span style=" mso-ascii- mso-hansi-">请求经同</span><span>HttpModule</span><span style=" mso-ascii- mso-hansi-">容器传递到</span><span>HttpHandler</span><span style=" mso-ascii- mso-hansi-">容器中时，</span><span>ASP.NET Framework</span><span style=" mso-ascii- mso-hansi-">会调用</span><span>HttpHandler</span><span style=" mso-ascii- mso-hansi-">的</span><span>ProcessRequest</span><span style=" mso-ascii- mso-hansi-">成员方法来对这个</span><span>HTTP</span><span style=" mso-ascii- mso-hansi-">请求进行真正的处理。以一个</span><span>ASPX</span><span style=" mso-ascii- mso-hansi-">页面为例，正是在这里一个</span><span>ASPX</span><span style=" mso-ascii- mso-hansi-">页面才被系统处理解析，并将处理完成的结果继续经由</span><span>HttpModule</span><span style=" mso-ascii- mso-hansi-">传递下去，直至到达客户端。</span></p>
<p style="text-align: left; text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style=" mso-ascii- mso-hansi-">对于</span><span>ASPX</span><span style=" mso-ascii- mso-hansi-">页面，</span><span>ASP.NET Framework</span><span style=" mso-ascii- mso-hansi-">在默认情况下是交给</span><span>System.Web.UI.PageHandlerFactory</span><span style=" mso-ascii- mso-hansi-">这个</span><span>HttpHandlerFactory</span><span style=" mso-ascii- mso-hansi-">来处理的。所谓一个</span><span>HttpHandlerFactory</span><span style=" mso-ascii- mso-hansi-">，所谓一个</span><span>HttpHandlerFactory</span><span style=" mso-ascii- mso-hansi-">，是指当一个</span><span>HTTP</span><span style=" mso-ascii- mso-hansi-">请求到达这个</span><span>HttpHandler Factory</span><span style=" mso-ascii- mso-hansi-">时，</span><span>HttpHandlerFactory</span><span style=" mso-ascii- mso-hansi-">会提供出一个</span><span>HttpHandler</span><span style=" mso-ascii- mso-hansi-">容器，交由这个</span><span>HttpHandler</span><span style=" mso-ascii- mso-hansi-">容器来处理这个</span><span>HTTP</span><span style=" mso-ascii- mso-hansi-">请求。</span></p>
<p style="text-align: left; text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style=" mso-ascii- mso-hansi-">一个</span><span>HTTP</span><span style=" mso-ascii- mso-hansi-">请求都是最终交给一个</span><span>HttpHandler</span><span style=" mso-ascii- mso-hansi-">容器中的</span><span>ProcessRequest</span><span style=" mso-ascii- mso-hansi-">方法来处理的。</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span></span></p>
<p style="text-align: center; margin: 0cm 0cm 0pt" class="MsoNormal" align="center"><span style=" mso-ascii- mso-hansi-"><img border="0" src="http://images.cnblogs.com/cnblogs_com/stwyhm/HttpHandler/ProcessRequest.jpg" width="680" height="268"><br>
图</span><span>1</span><span style=" mso-ascii- mso-hansi-">：</span><span>ProcessRequest</span><span style=" mso-ascii- mso-hansi-">方法</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span> </span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style=" color: blue; font-size: 12pt; mso-ascii- mso-hansi-"><br>
一个简单的</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt">HttpHandler</span></strong><strong style="mso-bidi-font-weight: normal"><span style=" color: blue; font-size: 12pt; mso-ascii- mso-hansi-">容器</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt"></span></strong></p>
<p style="text-align: left; text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style=" mso-ascii- mso-hansi-">通过实现</span><span>IHttpHandler</span><span style=" mso-ascii- mso-hansi-">接口可以创建自定义</span><span>HTTP</span><span style=" mso-ascii- mso-hansi-">处理程序，该接口只包含两个方法。通过调用</span><span>IsReusable</span><span style=" mso-ascii- mso-hansi-">，</span><span>IHttpHandlerFactory</span><span style=" mso-ascii- mso-hansi-">可以查询处理程序以确定是否可以使用同一实例为多个请求提供服务。</span><span>ProcessRequest</span><span style=" mso-ascii- mso-hansi-">方法将</span><span>HttpContext</span><span style=" mso-ascii- mso-hansi-">实例用作参数，这使它能够访问</span><span>Request</span><span style=" mso-ascii- mso-hansi-">和</span><span>Response</span><span style=" mso-ascii- mso-hansi-">内部对象。在一个</span><span>HttpHandler</span><span style=" mso-ascii- mso-hansi-">容器中如果需要访问</span><span>Session</span><span style=" mso-ascii- mso-hansi-">，必须实现</span><span>IRequiresSessionState</span><span style=" mso-ascii- mso-hansi-">接口，这只是一个标记接口，没有任何方法。</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style=" mso-ascii- mso-hansi-"><br>
示例</span><span>1</span><span style=" mso-ascii- mso-hansi-">：</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">using</span><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> System;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">using</span><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> System.Collections.Generic;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">using</span><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> System.Text;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">using</span><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> System.Web;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">using</span><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> System.Web.SessionState;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> </span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">namespace</span><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> MyHandler</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span><span style="color: gray">///</span><span style="color: green"> </span><span style="color: gray">&lt;summary&gt;</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span><span style="color: gray">///</span><span style="color: green"> </span></span><span style=" color: green; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">目的：实现一个简单的自定义<span>HttpHandler</span>容器<span></span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span><span style="color: gray">///</span><span style="color: green"> </span></span><span style=" color: green; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">作者：文野<span></span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span><span style="color: gray">///</span><span style="color: green"> </span></span><span style=" color: green; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">联系：<span>stwyhm@cnblogs.com</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span><span style="color: gray">///</span><span style="color: green"> </span><span style="color: gray">&lt;/summary&gt;</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">class</span> <span style="color: teal">MyFirstHandler</span> : <span style="color: teal">IHttpHandler</span>,<span style="color: teal">IRequiresSessionState</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>#region</span><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> IHttpHandler </span><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">成员<span></span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> </span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">bool</span> IsReusable</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">get</span> { <span style="color: blue">return</span> <span style="color: blue">true</span>; }</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> </span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">void</span> ProcessRequest(<span style="color: teal">HttpContext</span> context)</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>context.Response.Write(<span style="color: maroon">&quot;&lt;h1&gt;&lt;b&gt;Hello HttpHandler&lt;/b&gt;&lt;/h1&gt;&quot;</span>);</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>context.Session[<span style="color: maroon">&quot;Test&quot;</span>] = <span style="color: maroon">&quot;</span></span><span style=" color: maroon; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">测试<span>HttpHandler</span>容器中调用<span>Session&quot;</span></span><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>context.Response.Write(context.Session[<span style="color: maroon">&quot;Test&quot;</span>]);</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> </span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>#endregion</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style=" mso-ascii- mso-hansi-">在</span><span>Web.config</span><span style=" mso-ascii- mso-hansi-">中加入如下配置：</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">&lt;</span><span style=" color: maroon; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">httpHandlers</span><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">&gt;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span>&lt;</span><span style=" color: maroon; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">add</span><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt"> </span><span style=" color: red; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">verb</span><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">=</span><span style=" font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">&quot;<span style="color: blue">*</span>&quot;<span style="color: blue"> </span><span style="color: red">path</span><span style="color: blue">=</span>&quot;<span style="color: blue">*</span>&quot;<span style="color: blue"> </span><span style="color: red">type</span><span style="color: blue">=</span>&quot;<span style="color: blue">MyHandler.MyFirstHandler, MyHandler</span>&quot;<span style="color: blue">/&gt;</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">&lt;/</span><span style=" color: maroon; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">httpHandlers</span><span style=" color: blue; font-size: 9pt; mso-no-proof: yes; mso-hansi- mso-font-kerning: 0pt">&gt;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span><img border="0" src="http://images.cnblogs.com/cnblogs_com/stwyhm/HttpHandler/Sample1.JPG"><br>
 </span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt">IHttpHandler</span></strong><strong style="mso-bidi-font-weight: normal"><span style=" color: blue; font-size: 12pt; mso-ascii- mso-hansi-">工厂</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt"></span></strong></p>
<p style="text-align: left; text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span>ASP.NET Framework</span><span style=" mso-ascii- mso-hansi-">实际不直接将相关的页面资源</span><span>HTTP</span><span style=" mso-ascii- mso-hansi-">请求定位到一个其内部默认的</span><span>IHttpHandler</span><span style=" mso-ascii- mso-hansi-">容器之上，而定位到了其内部默认的</span><span>IHttpHandler</span><span style=" mso-ascii- mso-hansi-">工厂上。</span><span>IHttpHandler</span><span style=" mso-ascii- mso-hansi-">工厂的作用是对</span><span>IHttpHandler</span><span style=" mso-ascii- mso-hansi-">容器进行调度和管理。</span></p>
<p style="text-align: left; text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span>IHttpHandlerFactory</span><span style=" mso-ascii- mso-hansi-">接口包含两个方法。</span><span>GetHandler</span><span style=" mso-ascii- mso-hansi-">返回实现</span><span>IHttpHandler</span><span style=" mso-ascii- mso-hansi-">接口的类的实例，</span><span>ReleaseHandler</span><span style=" mso-ascii- mso-hansi-">使工厂可以重用现有的处理程序实例。</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span> </span></p>
<span>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><br>
 </p>
</span> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/xiao%5Fwei2008/blog/category/asp%2Enet%C4%A3%BF%E9%D4%B4%C2%EB">asp.net模块源码</a>&nbsp;<a href="http://hi.baidu.com/xiao%5Fwei2008/blog/item/63d2476d0e8b82f3431694d1.html#comment">查看评论</a>]]></description>
        <pubDate>2009-03-20  14:18</pubDate>
        <category><![CDATA[asp.net模块源码]]></category>
        <author><![CDATA[xiao_wei2008]]></author>
		<guid>http://hi.baidu.com/xiao%5Fwei2008/blog/item/63d2476d0e8b82f3431694d1.html</guid>
</item>

<item>
        <title><![CDATA[一点一点学ASP.NET之基础概念——HttpModule （二）]]></title>
        <link><![CDATA[http://hi.baidu.com/xiao%5Fwei2008/blog/item/0cefaf39376e0afb3a87ced7.html]]></link>
        <description><![CDATA[
		
		<p style="margin: 0cm 0cm 0pt" class="MsoNormal"> </p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span><img border="0" src="http://images.cnblogs.com/cnblogs_com/stwyhm/HttpModule/HttpModuleSample2.JPG"><br>
</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt">多个自定义的</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt">Http Module</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt">的运作</span></strong></p>
<p style="text-indent: 21pt; margin: 0cm 0cm 0pt; mso-char-indent-count: 2.0" class="MsoNormal"><span>从运行结果可以看到，在</span><span>web.config</span><span>文件中引入自定义</span><span>HttpModule</span><span>的顺序就决定了多个自定义</span><span>HttpModule</span><span>在处理一个</span><span>HTTP</span><span>请求的接管顺序。注：系统默认那几个</span><span>HttpModule</span><span>是最先衩</span><span>ASP.NET Framework</span><span>所加载上去的。</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span>示例</span><span>3</span><span>：（代码类同示例</span><span>2</span><span>）</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"> </p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span><img border="0" width="522" height="633" src="http://images.cnblogs.com/cnblogs_com/stwyhm/HttpModule/HttpModuleSample3.JPG"><br>
</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt"><br>
在</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt">HttpModule</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt">中终止此次的</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt">HTTP</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt">请求</span></strong></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span>可以利用</span><span>HttpModule</span><span>通过调用</span><span>HttpApplication.CompleteRequest()</span><span>方法实现当满足某一个条件时终止此次的</span><span>HTTP</span><span>请求。</span></p>
<p style="text-indent: 21pt; margin: 0cm 0cm 0pt; mso-char-indent-count: 2.0" class="MsoNormal"><span>需要注意的是，即使调用了</span><span>HttpApplication.CompleteRequest()</span><span>方法终止了一个</span><span>HTTP</span><span>请求，</span><span>ASP.NET Framework</span><span>仍然会触发</span><span>HttpApplication</span><span>后面的这</span><span>3</span><span>个事件：</span><span>EndRequest</span><span>事件、</span><span>PreSendRequestHeaders</span><span>事件、</span><span>PreSendRequestContent</span><span>事件。</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span>如果存在多个自定义的</span><span>HttpModule</span><span>的话，当</span><span>Module1</span><span>终止了一个</span><span>HTTP</span><span>请求，这个</span><span>HTTP</span><span>请求将不会再触发</span><span>Module2</span><span>中相应的事件了，但</span><span>Module2</span><span>的最后三个事件仍会被触发。</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span>示例</span><span>4</span><span>：</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">using</span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"> System;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">using</span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"> System.Collections.Generic;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">using</span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"> System.Text;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">using</span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"> System.Web;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">namespace</span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"> MyHttpModule</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">class</span> <span style="color: teal">CompleteRequestHttpModule</span> : <span style="color: teal">IHttpModule</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>#region</span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"> IHttpModule </span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">成员</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">void</span> Dispose()</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">void</span> Init(<span style="color: teal">HttpApplication</span> application)</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>application.BeginRequest += <span style="color: blue">new</span> <span style="color: teal">EventHandler</span>(Application_BeginRequest);</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">void</span> Application_BeginRequest(<span style="color: blue">object</span> sender, <span style="color: teal">EventArgs</span> e)</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="mso-spacerun: yes">&nbsp;&nbsp;</span><span style="color: teal">HttpApplication</span> application = (<span style="color: teal">HttpApplication</span>)sender;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>application.CompleteRequest();</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>application.Context.Response.Write(<span style="color: maroon">&quot;</span></span><span style="color: maroon; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">请求被终止。<span>&quot;</span></span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">);</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>#endregion</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">}</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"> </p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span><img border="0" src="http://images.cnblogs.com/cnblogs_com/stwyhm/HttpModule/HttpModuleSample4.JPG"><br>
</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt">参考资料</span></strong></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span>《</span><span>ASP.NET</span><span>深入解析》</span></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span>《</span><span>ASP.NET</span><span>实用全书》</span></p>
<p style="text-indent: 21.75pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span><br>
<span style="color: blue; font-size: 12pt"><strong>本文源码：<br>
&nbsp;&nbsp;&nbsp;  </strong><font color="#000000"><span><a href="http://files.cnblogs.com/stwyhm/HttpModule/MyHttpModuleTest.rar"><font color="#000000"><span>下载</span></font></a><br>
</span></font></span></span></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/xiao%5Fwei2008/blog/category/asp%2Enet%C4%A3%BF%E9%D4%B4%C2%EB">asp.net模块源码</a>&nbsp;<a href="http://hi.baidu.com/xiao%5Fwei2008/blog/item/0cefaf39376e0afb3a87ced7.html#comment">查看评论</a>]]></description>
        <pubDate>2009-03-20  14:14</pubDate>
        <category><![CDATA[asp.net模块源码]]></category>
        <author><![CDATA[xiao_wei2008]]></author>
		<guid>http://hi.baidu.com/xiao%5Fwei2008/blog/item/0cefaf39376e0afb3a87ced7.html</guid>
</item>

<item>
        <title><![CDATA[一点一点学ASP.NET之基础概念——HttpModule (一)]]></title>
        <link><![CDATA[http://hi.baidu.com/xiao%5Fwei2008/blog/item/397302f0ea589fcb7931aad7.html]]></link>
        <description><![CDATA[
		
		<p><strong><font color="#0000ff" size="3">HttpModule</font><span>是如何工作的</span></strong></p>
<p style="text-indent: 21pt; margin: 0cm 0cm 0pt; mso-char-indent-count: 2.0" class="MsoNormal"><span>当一个</span><span>HTTP</span><span>请求到达</span><span>HttpModule</span><span>时，整个</span><span>ASP.NET Framework</span><span>系统还并没有对这个</span><span>HTTP</span><span>请求做任何处理，也就是说此时对于</span><span>HTTP</span><span>请求来讲，</span><span>HttpModule</span><span>是一个</span><span>HTTP</span><span>请求的&ldquo;必经之路&rdquo;，所以可以在这个</span><span>HTTP</span><span>请求传递到真正的请求处理中心（</span><span>HttpHandler</span><span>）之前附加一些需要的信息在这个</span><span>HTTP</span><span>请求信息之上，或者针对截获的这个</span><span>HTTP</span><span>请求信息作一些额外的工作，或者在某些情况下干脆终止满足一些条件的</span><span>HTTP</span><span>请求，从而可以起到一个</span><span>Filter</span><span>过滤器的作用。</span></p>
<p style="text-indent: 21pt; margin: 0cm 0cm 0pt; mso-char-indent-count: 2.0" class="MsoNormal"> </p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span>示例</span><span>1</span><span>：</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">using</span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"> System;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">using</span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"> System.Collections.Generic;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">using</span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"> System.Text;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">using</span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"> System.Web;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">namespace</span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"> MyHttpModule</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: gray">///</span><span style="color: green"> </span><span style="color: gray">&lt;summary&gt;</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: gray">///</span><span style="color: green"> </span></span><span style="color: green; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">说明：用来实现自己的<span>HttpModule</span>类。</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: gray">///</span><span style="color: green"> </span></span><span style="color: green; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">作者：文野</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: gray">///</span><span style="color: green"> </span></span><span style="color: green; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">联系：<span>stwyhm@cnblogs.com</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: gray">///</span><span style="color: green"> </span><span style="color: gray">&lt;/summary&gt;</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">class</span> <span style="color: teal">MyFirstHttpModule</span> : <span style="color: teal">IHttpModule</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">private</span> <span style="color: blue">void</span> Application_BeginRequest(<span style="color: blue">object</span> sender, <span style="color: teal">EventArgs</span> e)</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: teal">HttpApplication</span> application = (<span style="color: teal">HttpApplication</span>)sender;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: teal">HttpContext</span> context = application.Context;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: teal">HttpRequest</span> request = application.Request;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: teal">HttpResponse</span> response = application.Response;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>response.Write(<span style="color: maroon">&quot;</span></span><span style="color: maroon; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">我来自自定义<span>HttpModule</span>中的<span>BeginRequest&lt;br /&gt;&quot;</span></span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">);</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">private</span> <span style="color: blue">void</span> Application_EndRequest(<span style="color: blue">object</span> sender, <span style="color: teal">EventArgs</span> e)</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: teal">HttpApplication</span> application = (<span style="color: teal">HttpApplication</span>)sender;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: teal">HttpContext</span> context = application.Context;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: teal">HttpRequest</span> request = application.Request;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: teal">HttpResponse</span> response = application.Response;</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>response.Write(<span style="color: maroon">&quot;</span></span><span style="color: maroon; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">我来自自定义<span>HttpModule</span>中的<span>EndRequest&lt;br /&gt;&quot;</span></span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">);</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>#region</span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"> IHttpModule </span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">成员</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">void</span> Dispose()</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: blue">public</span> <span style="color: blue">void</span> Init(<span style="color: teal">HttpApplication</span> application)</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>{</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>application.BeginRequest += <span style="color: blue">new</span> <span style="color: teal">EventHandler</span>(Application_BeginRequest);</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>application.EndRequest += <span style="color: blue">new</span> <span style="color: teal">EventHandler</span>(Application_EndRequest);</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"> </p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>#endregion</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;  </span>}</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">}</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span>在</span><span>Web.config</span><span>进行如下配置</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">&lt;</span><span style="color: maroon; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">add</span><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes"> </span><span style="color: red; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">name</span><span style="color: blue; font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">=</span><span style="font-size: 9pt; mso-hansi-: 0pt; mso-no-proof: yes">&quot;<span style="color: blue">MyFirstHttpModule</span>&quot;<span style="color: blue"> </span><span style="color: red">type</span><span style="color: blue">=</span>&quot;<span style="color: blue">MyHttpModule.MyFirstHttpModule,MyHttpModule</span>&quot;<span style="color: blue">/&gt;<br>
</span></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"> </p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span><br>
<img border="0" src="http://images.cnblogs.com/cnblogs_com/stwyhm/HttpModule/HttpModuleSample1.JPG"> </span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt"><br>
深入了解</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: blue; font-size: 12pt">HttpModule</span></strong></p>
<p style="text-indent: 21pt; margin: 0cm 0cm 0pt; mso-char-indent-count: 2.0" class="MsoNormal"><span>一个</span><span>HTTP</span><span>请求在</span><span>HttpModule</span><span>容器的传递过程中，会在某一时刻（</span><span>ResolveRequestCache</span><span>事件）将这个</span><span>HTTP</span><span>请求传递给</span><span>HttpHandler</span><span>容器。在这个事件之后，</span><span>HttpModule</span><span>容器会建立一个</span><span>HttpHandler</span><span>的入口实例，但是此时并没有将</span><span>HTTP</span><span>请求控制权交出，而是继续触发</span><span>AcquireRequestState</span><span>事件以及</span><span>PreRequestHandlerExcute</span><span>事件。在</span><span>PreRequestHandlerExcute</span><span>事件之后，</span><span>HttpModule</span><span>窗口就会将控制权暂时交给</span><span>HttpHandler</span><span>容器，以便进行真正的</span><span>HTTP</span><span>请求处理工作。</span></p>
<p style="text-indent: 21pt; margin: 0cm 0cm 0pt; mso-char-indent-count: 2.0" class="MsoNormal"><span>而在</span><span>HttpHandler</span><span>容器内部会执行</span><span>ProcessRequest</span><span>方法来处理</span><span>HTTP</span><span>请求。在容器</span><span>HttpHandler</span><span>处理完毕整个</span><span>HTTP</span><span>请求之后，会将控制权交还给</span><span>HttpModule</span><span>，</span><span>HttpModule</span><span>则会继续对处理完毕的</span><span>HTTP</span><span>请求信息流进行层层的转交动作，直到返回到客户端为止。<br>
</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"> </p>
<p style="text-align: center; margin: 0cm 0cm 0pt" class="MsoNormal" align="center"><span><img border="0" width="543" height="768" src="http://images.cnblogs.com/cnblogs_com/stwyhm/HttpModule/HttpModuleLife.jpg"><br>
图</span><span>1</span><span>：</span><span>HttpModule</span><span>生命周期示意图</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"> </p>
<span>
<p> </p>
</span> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/xiao%5Fwei2008/blog/category/asp%2Enet%C4%A3%BF%E9%D4%B4%C2%EB">asp.net模块源码</a>&nbsp;<a href="http://hi.baidu.com/xiao%5Fwei2008/blog/item/397302f0ea589fcb7931aad7.html#comment">查看评论</a>]]></description>
        <pubDate>2009-03-20  14:14</pubDate>
        <category><![CDATA[asp.net模块源码]]></category>
        <author><![CDATA[xiao_wei2008]]></author>
		<guid>http://hi.baidu.com/xiao%5Fwei2008/blog/item/397302f0ea589fcb7931aad7.html</guid>
</item>


</channel>
</rss>