asp.net执行顺速
理解ASP.NET的运行机制(例:通过HttpModule来计算页面执行时间)
一:简要介绍一下asp.net的执行步骤
1.IIS接收到客户请求
2. IIS把请求交给aspnet_isapi.dll处理
3.(如果是第一次运行程序)装载bin目录中的dll
4.(如果是第一次运行程序)读取各级webconfig中的配置
5.(如果是第一次运行程序)编译装载global.asax,初始化HttpApplication实例
6.创建响应请求的HttpContext
7.创建承载响应结果的HttpTextWriter
8.找到合适的HttpHandler(asp.net页面),处理http请求
9.处理session,异常
10.把处理结果反馈个客户
当HttpApplication实例创建后,
会调用InitModules()方法,
这个方法会根据webconfig文件中的配置调用相应的HttpModule
这就是可定制的HttpModule
二:通过定制HttpModule来计算页面执行时间
当HttpApplication创建HttpModule时
将会执行HttpModule的Init方法
在这个方法中,可以订阅多个事件
如下:
BeginRequest
AuthenticateRequest 当安全模块已建立用户标识时发生。
PostAuthenticateRequest
AuthorizeRequest 当安全模块已验证用户授权时发生。
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireRequestState
PreRequestHandlerExecute
PostRequestHandlerExecute
ReleaseRequestState
PostReleaseRequestState
EndRequest
这些事件也是HttpApplication处理管线中的各种事件
常用的就是BeginRequest和EndRequest
下面我们做一个例子来实现计算页面的执行时间
先看webconfig的代码
<?xmlversionxmlversionxmlversionxmlversion="1.0"?>
<configuration>
<system.web>
<httpModules>
<add name="MyModule"type="xland.MyModule"/>
</httpModules>
</system.web>
</configuration>
xland是我创建的一个类库,命名空间为xland
MyModule为该类库下的一个类实现了IHttpModules接口
下面看这个类的代码:
using System;
usingSystem.Collections.Generic;
usingSystem.Web;//引用web命名空间
using System.Text;
namespace xland
{
public classMyModule:IHttpModule//继承IHttpModules
{
public void Init(HttpApplicationapplication)//实现IHttpModules中的Init事件
{
//订阅两个事件
application.BeginRequest +=newEventHandler(application_BeginRequest);
application.EndRequest+=newEventHandler(application_EndRequest);
}
private DateTimestarttime;
private void application_BeginRequest(object sender, EventArgse)
{
//objectsender是BeginRequest传递过来的对象
//里面存储的就是HttpApplication实例
//HttpApplication实例里包含HttpContext属性
starttime = DateTime.Now;
HttpApplication application =(HttpApplication)sender;
HttpContext context =application.Context;
context.Response.Write("开始计时,现在的时间为:" +starttime.ToString("yyyy年MM月dd日HH:mm:ss.fff") +"<br>");
}
private void application_EndRequest(object sender, EventArgse)
{
DateTime endtime =DateTime.Now;
HttpApplication application =(HttpApplication)sender;
HttpContext context =application.Context;
context.Response.Write("计时结束,现在的时间为:" +endtime.ToString("yyyy年MM月dd日HH:mm:ss.fff") +"<br>");
context.Response.Write("页面执行时间:" + (endtime -starttime).ToString());
}
//必须实现dispose接口
public void Dispose() { }
}
}
好其他的都不用管,我们在default.aspx中做一些耗时的操作
注意在web应用程序类库中一定要添加xland的引用
using System;
using System.Collections;
usingSystem.Configuration;
using System.Data;
using System.Web;
usingSystem.Web.Security;
using System.Web.UI;
usingSystem.Web.UI.HtmlControls;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
namespace _1
{
publicpartial class _Default :System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgse)
{
for (int i = 1; i < 10000;i++)
{
Response.Write(i);
if (i % 100 == 0) {Response.Write("<br>");}
}
}
}
}
BeginRequest和EndRequest里可以做很多事情
比如处理cookie的domain等
等具体需要的时候要能想到这里来
asp.net执行顺速的更多相关文章
- asp.net执行SqlServer存储过程!(详解!)
ASP.NET执行存储过程 一. 执行一个没有参数的存储过程的代码如下: connectionString为连接字符串 SqlConnection conn=new SqlConnection(con ...
- ASP.NET执行模型之IIS服务器处理流程
之前在网上看过很多对这方面的讲解,但个人觉得看下来过于 "深奥",不容易理解,所以想用更简单的方式进行阐述,便于理解. 本次我们重点分析用户请求到页面呈现过程中Web服务器的处理过 ...
- IIS 内部运行机制及Asp.Net执行过程详解
一直以来对一个Asp.net页面穿过IIS后就返回给浏览器一个HTML页面感觉很是神奇.虽然做技术这么长时间了,也曾经大致了解过一点来龙去脉,但是如果你真的问起我比较详细的过程,我还真的回答不上来,好 ...
- ASP.NET执行循序
首先第一次运行一个应用程序(WebSite或者WebApplication都是Web应用程序)第一次请求 -> 1,IIS -> 2,aspnet_isapi(非托管dll) -> ...
- 关于asp.net执行exe程序时权限不够的解决办法(2015.04.17更新)
一,本文背景 长话短说:asp.net项目中需要用到PDF转换成SWF文件,用户上传后自动调用pdf2swf.exe转换. 但有个问题,执行时权限不够,导致一直报错(滚动条一直在往下滚,刷屏中),见下 ...
- ASP.net绑定文本框Enter事件到按钮 ASP.NET执行后台执行JS方法
txtAccountBarcode.Attributes.Add("onkeydown", "if(event.which || event.keyCode){if (( ...
- C#和asp.net执行外部EXE程序
这两天研究下.Net的执行外部EXE程序问题,就是在一个程序里通过按钮或其他操作运行起来另外一个程序,需要传入参数,如用户名.密码之类(实际上很类似单点登录,不过要简单的多的多):总结如下: 1.CS ...
- asp.net执行cmd命令(包括第三方应用的命令行)
Process p = new Process(); p.StartInfo.FileName = "cmd.exe"; p.StartInfo.UseShellExecute = ...
- ASP.NET执行cmd命令
批处理命令,是执行速度最快效益最高的命令.因为批处理命令,说白了,就是ms-dos环境下的命令,有很多的批处理命令,都是纯DOS下的命令. 然而,批处理命令尽管功能强大,却存在不足之处.批处理命令只能 ...
随机推荐
- 2018-2019-2 《Java程序设计》结对项目阶段总结《四则运算——整数》(二)
20175218 2018-2019-2 <Java程序设计>结对项目阶段总结<四则运算--整数> 一.需求分析 实现一个命令行程序,要求: 自动生成小学四则运算题目(加,减, ...
- 通信导论-IP数据网络基础(1)
TCP/IP封装过程: 端口号:服务器一般都是通过知名端口号(1~1023)来识别应用程序,(TCP)21.23.25,(UDP)53.69.161 TCP报文格式: 字节号:TCP把连接中发送的所有 ...
- unity 傅老师学习
辅助插件 I tweeen anmition 补充valueto https://www.bilibili.com/read/cv103358 开关门 iTween event脚本 iT ...
- SpringBoot集成RabbitMQ 从零到一,学会MQ异步和解耦--
RabbitMQ 概念 RabbitMQ 即一个消息队列,_主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用._RabbitMQ使用的是AMQP协议,它是一种二进制协议.默认启 ...
- 生信分析常用脚本(二)--SOAPdenovo
1.SOAPDenovo配置文件示例 软件下载安装和使用:http://soap.genomics.org.cn/soapdenovo.html asm.cfg #maximal read lengt ...
- 前端面试之vue相关的面试题
hello,你们的小可爱,皮皮聪又来发表感想了. 首先简单概括下会遇到的问题: 1.vuex作用 ①vuex是一个状态管理的插件,可以解决不同组件之间的数据共享和数据持久化. ②vue中的多个组件之间 ...
- iptables命令提取总结,包含扩展模块<取自朱双印博客>
以下内容只是一些命令相关的,以朱双印博客中的iptables的教程提取出来的.纯粹只是命令的总结,如果需要看理论的知识,建议去看朱老师的博客,目前还没有看到写得比这个好的了. <http://w ...
- [精华][推荐]CAS SSO实现单点登录框架学习源码
1.通过下载稳定版本的方式下载cas的相关源码包,如下: 直接选择4.2.1的稳定代码即可 2.我们项目中的版本版本使用maven apereo远程库去下载 通过远程maven库下载cas-serve ...
- HttpWebRequest 自定义header,Post发送请求,请求形式是json,坑爹的代码
public static string PostMoths(string url, LoginDTO obj_model, Dictionary<string, string> dic ...
- instanceof简单用法
语法: 对象 instanceof 类: 含义:如果这个对象时这个类或者这个类的子类的实例化,那么结果及时ture, 否则 false. 常常用来判断一个类是否是某个类的子类,以此判断A类是否继承或者 ...