抽空看了一下博主GodSpeed 的《ASP.NET应用程序生命周期趣谈系列》的三篇文章,讲解得不错。尤其是第三篇文章 ASP.NET应用程序生命周期趣谈(三) HttpModule 的后半段,让我收获颇多,顺便自己也做了一个Demo 进行测试。

首先:我在Web.config 配置文件中,分别在 <httpHandlers><httpModules> 节点添加了自己的配置。

Web.config 代码如下:

<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
<add verb="*" path="*.aspx" type="Web_1.XG_Handler"/>
</httpHandlers>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="XG_Module" type="Web_1.XG_Module"/>
</httpModules>

其次:我添加了一个XG_Module.cs 类文件

XG_Module 类实现了IHttpModule 接口

XG_Handler 类实现了IHttpHandler 接口

XG_Module.cs 代码如下:

using System;
using System.Configuration;
using System.Web;
namespace Web_1
{
/*
* 在Web.config中: <add name="XG_Module" type="Web_1.XG_Module"/>
*/
public class XG_Module:IHttpModule
{
#region IHttpModule 成员
public void Dispose()
{ }
public void Init(HttpApplication context)
{
System.Diagnostics.Debug.WriteLine("调式输出:XG_Module 哈哈~~ ");
//this.Init(context); //错误
}
#endregion
}
/*
* 在Web.config中:<add verb="*" path="*.aspx" type="Web_1.XG_Handler"/>
*/
public class XG_Handler : IHttpHandler
{
#region IHttpHandler 成员
public bool IsReusable
{ get { return true; } }
public void ProcessRequest(HttpContext context)
{
//获得客户端请求
System.Diagnostics.Debug.WriteLine(context.Request.QueryString[0]);
//返回服务器响应
context.Response.Write("输出:XG_Handler 呵呵~~ ");
}
#endregion
}
}

XG_Module 类XG_Handler 类中的System.Diagnostics.Debug.WriteLine( ) 方法在预期的时间打印了调试信息。

最后:为了更加直观的看到客户端与服务器端的通讯,我再次编写了一个客户端页面AJAX_test.html 使用AJAX 技术直接与服务器通讯,效果更佳。

AJAX_test.html 代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript">
var xmlhttp;
//创建异步对象
function initXmlHttp(){
if(window.ActiveXObject){ //IE浏览器
xmlhttp = new window.ActiveXObject("Microsoft.XMLHTTP");
}
else if(window.XMLHttpRequest){ //非IE浏览器
xmlhttp = new window.XMLHttpRequest();
}
}
window.onload = initXmlHttp;
//发送异步请求
function sendRequest(){
xmlhttp.open("GET","AJAX_servers.aspx?myname=xg"); //传参myname
//指定当readyState属性改变时的事件处理句柄onreadystatechange
xmlhttp.onreadystatechange = funState;
xmlhttp.send(null);
}
//获取异步结果
function funState(){
if( xmlhttp.readyState == 4)
{
if( xmlhttp.status == 200 || //status==200 表示成功!
xmlhttp.status == 0 ) //本机测试时,status可能为0。
{
var re = xmlhttp.responseText;
//alert(re);
document.getElementById("divShow").innerHTML = re;
}
}
}
</script>
</head>
<body>
<button onclick="sendRequest();">发送</button>
<div id="divShow"></div>
</body>
</html>

对于代码,我就不多解释了,注释写得很清楚。

附加:管道+上下文(Pipeline + Context)模式

ASP.NET 的运行时就可以看成是一个由若干HttpModule 组成的处理HTTP 请求的管道,ASP.NET 运行时管道的上下文对象是HttpContext ;

WCF 中Binding 就是一个由若干信道(Channel)组成的处理Message 的管道,而Binding 管道的上下文对象是BindingContext ;

相同的设计还体现在.NET Remoting、BizTalk、Unity(Unity 是微软P&P推出的一个开源的IoC框架)等相关框架和产品的设计上。[引用来源:你知道Unity IoC Container是如何创建对象的吗?]

本文转自钢钢博客园博客,原文链接:http://www.cnblogs.com/xugang/archive/2010/07/14/1777333.html,如需转载请自行联系原作者

测试ASP_NET 生命周期相关推荐

  1. 测试Servlet生命周期学习笔记

    测试环境:windows xp旗舰版 软件环境:myclipse8.5+tomcat7.0 ****************************************************** ...

  2. 软件的生命周期和测试的生命周期的区分

    软件的生命周期 测试的生命周期 软件测试贯穿于软件的整个生命周期 在需求分析阶段测试人员的活 测试人员需要站在用户角度分析:软件需求是否合理:站在技术角度分析:技术上是否可行,还有没有优化的空间:站在 ...

  3. 测试(生命周期阶段)

    软件生命周期(SDLC)的六个阶段 1.问题的定义及规划       此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性. 2.需求分析       在确定软件开发可行的情况下,对软 ...

  4. 测试Servlet生命周期例子程序

    写一个类TestLifeCycleServlet,生成构造器TestLifeCycleServlet();重写HttpServlet的doGet();重写GenericServlet的destroy( ...

  5. linux内核测试,Linux内核测试的生命周期

    内核持续集成(CKI)项目旨在防止错误进入 Linux 内核. 在 Linux 内核的持续集成测试 一文中,我介绍了 内核持续集成Continuous Kernel Integration(CKI)项 ...

  6. 安卓application生命周期的onCreate、onLowMemory、onTrimMemory、onConfigurationChanged

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓测试Application生命周期: application类为应用程序的创建和终止.低可用内存和配置改变提供了事件处理程序(如前面部分所述). ...

  7. Unity3D动画游戏设计算法 --脚本生命周期

    1.实验的目的和要求 掌握脚本生命周期的概念,掌握MonoBehavior类,理解各个事件的含义.执行条件.执行过程,能够熟练利用各个事件实现相应的功能. 2.实验内容 编写相关代码,测试脚本生命周期 ...

  8. 对Activity生命周期的理解

    Android四大组件学习之Activity 关于Activity生命周期中几个关键的回调的理解 在测试activity生命周期的过程中,对onSaveInstance.onRestoreInstan ...

  9. 软件测试基础之三个重要的生命周期

    三个重要的生命周期 三个重要的生命周期包括软件生命周期.测试的生命周期.缺陷的生命周期. 以下分别写一下这三个周期. 软件生命周期 软件生命周期(Software Life Cycle,SLC)是软件 ...

最新文章

  1. 告别深度学习炼丹术!谷歌大脑提出“权重无关”神经网络
  2. Safari、IE浏览器出现允许改写地址栏的漏洞
  3. 思杰“个人云”翻开企业人本管理新篇章
  4. MNE-Python专辑 (2) MNE中数据结构Raw及其用法简介(更新)
  5. 重要头文件: cc430x613x.h
  6. wincc flexable变量组态
  7. 汇编语言——可由指令直接指定的I/O端口数
  8. 菜鸟教程之工具使用(六)——让Maven项目直接在eclipse内部的Tomcat中执行
  9. PowerShell(PHPStorm terminal with PowerShell)运行git log中文乱码
  10. SQL Server中的递归CTE和外键引用
  11. X86 “将死“?RISC-V 正当立
  12. python 中文乱码_python 解决cv2绘制中文乱码问题
  13. Mysql面试常见题
  14. java面经_字节跳动 暑期实习 广告部 后台开发 java 一二面经
  15. GD32外部SPI Flash下载算法制作
  16. 高清加载具体(如清明上河图)
  17. 技校自我鉴定范文计算机600字,技校自我鉴定100字范文18篇
  18. 【CZY选讲·逆序对】
  19. 手披云雾开鸿蒙,赞美泰山的诗句
  20. 使用GANs生成时间序列数据:DoppelGANger论文详解

热门文章

  1. 用宏定义代替printf函数
  2. spring:《spring实战》读后感三
  3. Nginx负载均衡和反向代理
  4. 一招教你掌握肌肉发力的感觉
  5. ibatis轻松入门
  6. jQuery 第二章
  7. SQL Server 2005 镜像构建说明(转载)
  8. 微信小程序开发实战(二)UI组件介绍 Vant Weapp
  9. 华为ac配置radius认证服务器_合作生态 | 升腾威讯云系统与华为泰山服务器完成产品互认证...
  10. 【SSM框架系列】Spring - JdbcTemplate声明式事务