测试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,如需转载请自行联系原作者

相关文章
|
测试技术
测试的相关概念(需求\bug\测试用例\生命周期)
测试的相关概念(需求\bug\测试用例\生命周期)
57 0
|
测试技术
软件测试面试题:测试生命周期,测试过程分为几个阶段,以及各阶段的含义及使用的方法?
软件测试面试题:测试生命周期,测试过程分为几个阶段,以及各阶段的含义及使用的方法?
108 0
|
Java 测试技术 API
.net core实践系列之短信服务-Api的SDK的实现与测试(二)
.net core实践系列之短信服务-Api的SDK的实现与测试(二)
123 0
.net core实践系列之短信服务-Api的SDK的实现与测试(二)
|
XML JSON API
.net core实践系列之短信服务-Api的SDK的实现与测试(一)
.net core实践系列之短信服务-Api的SDK的实现与测试(一)
233 0
.net core实践系列之短信服务-Api的SDK的实现与测试(一)
|
测试技术
.net持续集成测试篇之Nunit 测试配置
.net持续集成测试篇之Nunit 测试配置在开始之前我们先看一个陷阱 用到的Person类如下 public class Person:IPerson { public string Name { get; set; } public int Age { get; set; } ...
980 0
|
测试技术 vr&ar
.net持续集成测试篇之Nunit参数化测试
.net持续集成测试篇之Nunit参数化测试系列目录 在进行单元测试的时候,很多时候,很多时候我们都是在单元测试方法内部提供特定的值,但是这样测试往往造成样本数不足从而导致覆盖的结果不够全面,很多时候我们更想提供来自外部的,满足条件的一组值来进行测试.
817 0
如何使用沙箱测试扫码支付(.net版)
说明: 本帖是利用支付宝沙箱测试当面付支付接口,不是官方demo,是我自己写的简版示例,以及我的沙箱账号密钥,仅供参考测试用测试环境:适用于Visual studio 2010及以上版本、Framework3.
1069 0
【STM32 .Net MF开发板学习-02】GPIO测试
示例很简单,主要是按钮和LED灯的测试,红牛和EM-STM3210E的按钮和LED有所不同,所以有针对性的对二者pin都做了定义(这些信息,你可以直接看开发板相对应的原理图,很容易就可以获得相关Pin脚的定义)。
470 0
|
芯片 内存技术
【STM32 .Net MF开发板学习-10】SPI测试之触摸屏坐标获取
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(用于单向传输时,也就是半双工方式)
666 0
如何使用沙箱测试单笔转账到支付宝(.net版)
说明: 本帖是利用支付宝沙箱测试“单笔转账到支付宝账户”,demo中会配置个人的沙箱账号信息,方便大家测试。 测试环境:visual studio 2010及以上+.NET framework 3.5及以上  注意事项:  1.目前仅支持账户余额渠道付款。
906 0

相关产品

  • 云迁移中心