测试ASP_NET 生命周期

简介:

抽空看了一下博主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,如需转载请自行联系原作者

相关文章
|
16天前
|
测试技术 程序员 开发者
软件测试项目式学习一(认识软件生命周期与开发模型及软件质量)
软件测试项目式学习一(认识软件生命周期与开发模型及软件质量)
10 0
|
17天前
|
编解码 测试技术 数据库连接
【软件测试】 软件测试生命周期与Bug
【软件测试】 软件测试生命周期与Bug
|
24天前
|
测试技术
深入理解与应用软件测试的生命周期管理
【5月更文挑战第27天】 在软件开发的世界中,确保产品质量的关键步骤之一是执行细致的软件测试。本文将重点探讨软件测试生命周期(STLC)的各个阶段,包括需求分析、测试计划、测试设计、测试实施、测试评估和缺陷管理等关键节点,以及如何有效地利用这些阶段来提高测试效率和产品的质量。通过实际案例分析和最佳实践的分享,我们旨在为读者提供一套系统的方法论,帮助他们在软件测试领域实现更高的专业水平。
|
28天前
|
编解码 测试技术 程序员
软件测试的生命周期
软件测试的生命周期
34 0
|
1月前
|
机器学习/深度学习 数据采集 人工智能
人工智能,应该如何测试?(四)模型全生命周期流程与测试图
本文补充了完整的业务和测试流程,包括生命周期流程图,强调测试人员在模型测试中的角色。主要测试活动有:1) 离线模型测试,使用训练集、验证集和测试集评估模型;2) 线上线下一致性测试,确保特征工程的一致性;3) A/B Test,逐步替换新旧模型以观察效果;4) 线上模型监控,实时跟踪用户行为变化;5) 数据质量测试,验证新数据质量以防影响模型效果。
44 0
|
8月前
|
XML Java 测试技术
JVM && 软件测试的目的和原则 && Spring基本概念 && 项目创建 && 软件测试的生命周期 && SpringBoot创建和运行 && Bean作用域
JVM && 软件测试的目的和原则 && Spring基本概念 && 项目创建 && 软件测试的生命周期 && SpringBoot创建和运行 && Bean作用域
57 0
|
测试技术
测试的相关概念(需求\bug\测试用例\生命周期)
测试的相关概念(需求\bug\测试用例\生命周期)
64 0
|
测试技术
软件测试面试题:复杂的软件缺陷生命周期?
软件测试面试题:复杂的软件缺陷生命周期?
64 0
|
测试技术
软件测试面试题:测试生命周期,测试过程分为几个阶段,以及各阶段的含义及使用的方法?
软件测试面试题:测试生命周期,测试过程分为几个阶段,以及各阶段的含义及使用的方法?
126 0
|
测试技术
软件测试面试题:Activity生命周期?
软件测试面试题:Activity生命周期?
94 0