转--global.asax文件(站点计数器)
利用global.asax,做站点技术器:
<script runat="server">
void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
System.IO.StreamReader srd = new System.IO.StreamReader(Server.MapPath("Counter.txt"));
int count = int.Parse(srd.ReadLine());
Application.Lock();
Application["count"] = count;
Application.UnLock();
srd.Close();
}
void Application_End(object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码
System.IO.StreamWriter swt = new System.IO.StreamWriter(Server.MapPath("Counter.txt"));
swt.WriteLine(Application["count"]);
swt.Close();
}
void Application_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码
}
void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码
Application.Lock();
Application["count"] = Convert.ToInt16(Application["count"]) + 1;
Application.UnLock();
System.IO.StreamWriter swt = new System.IO.StreamWriter(Server.MapPath("Counter.txt"));
swt.WriteLine(Application["count"]);
swt.Close();
}
void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。
System.IO.StreamWriter swt = new System.IO.StreamWriter(Server.MapPath("Counter.txt"));
swt.WriteLine(Application["count"]);
swt.Close();
}
/*然后便可以在网页中要显示计数器的地方用Appliation["Count"]对象来显示了。*/
</script>
ps:利用文件读写的方式..则先建立文件Counter.txt,否则报错
ps: 然后便可以在网页中要显示计数器的地方用Appliation["Count"]对象来显示了。
global.asax是一个文本文件,它提供全局可用代码。这些代码包括应用程序的事件处理程序以及会话事件、方法和静态变量。有时该文件也被称为应用程序文件。
global.asax文件中的任何代码都是它所在的应用程序的一部分。每个应用程序在其根 目录下只能有一个global.asax文件。然而,这个文件是可选的。如果没有global.asax文件,应用程序将对所有事件应用由 HttpApplication类提供的默认行为。
当应用程序运行的时候,global.asax的内容被编译到一个继承自HttpApplication类的类中。因此,HttpApplication类中所有的方法、类和对象对于应用程序都是可用的。
CLR监控着global.asax的变化。如果它察觉到这个文件发生了改变,那么将自动启 动一个新的应用程序复本,同时创建一个新的应用程序域。原应用程序域当前正在处理的请求被允许结束,而任何新的请求都交由新应用程序域来处理。当原应用程 序域的最后一个请求处理完成时,这个应用程序域即被清除。这有效的保证了应用程序可以重新启动,而不被任何用户察觉。
为防止应用程序用户下载应用程序而看到源代码,ASP.NET缺省配置为阻止用户查看global.asax的内容。如果有人在浏览器输入以下URL:
http://localhost/progaspnet/Global.asax
这将会收到一个403(禁止访问)错误信息或者类似的信息如:
This type of page is not served。
提示:简单而言,web.config文件与global.asax有些类似的地方。如果这个文件被更改,应用程序将自动“重启”。同样,也不可能在浏览器中查看web.config文件。
Global.asax文件从外观和结构上与页面文件(.aspx)相似。它可以有一个或多个部分,简要描述如下:
l 指令
l 脚本块
l Object声明
正如Web页和Web服务能够使用代码隐藏功能,global.asax同样也可以。然而,与Web页和Web服务的条件有所不同,VS2005默认状态下不对global.asax使用代码隐藏功能。
提示:Visual Studio 2005预览版默认对global.asax使用代码隐藏模型。目前仍然支持代码隐藏,但不是默认使用。
为了对global.asax使用代码隐藏技术,可使用位于该文件头部的Application指令(类似于页面文件的Page指令,下一节将详细介绍)的Inherits属性,该属性指向global.asax.cs中的代码隐藏类。??????????---
同时,也有一个CodeBehind属性用来指向代码隐藏文件。然而,如果它指向的是一个位于App_Code文件夹以外的位置,那么必须对这个类文件进行手动编辑。
通过右键单击解决方案资源管理器中的网站或者单击网站菜单,然后选择“Add New Item...”,接着选择全局应用程序类,可以为Web应用程序添加一个global.asax文件。保留默认名称global.asax。
源代码如下:
<script runat="server">
void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
}
void Application_End(object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码
}
void Application_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码
}
void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码
}
void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。
}
</script>
l 指令
与Web页和Web服务文件相比,global.asax可以以多个指令作为开始。这些指令在处理ASP.NET文件时指定应用程序编译的设置。与Page指令相比,Application指令可接受一个或者多个具有字典结构的属性/值对。此处支持三个指令:Application、Import和Assembly。
Application Application指令设置编译器的应用程序专用属性。以下是一个Application指令示例:
<%@ Application Language="C#" Inherits="WebServiceConsumer.Global" Description="A sample application" %>
Language属性可以设置为任何一种标准语言名称:VB、C#、JS、或VJ#,它们分别对应VB2005、C#、JScript.NET或J#。(可以使用任何一种支持.NET平台的第三方语言)默认值为C#。此处的Language设置的是语言专门用于global.asax文件,而非其他应用程序代码文件。例如,可以完全合法地在global.asax文件中使用C#,在.aspx文件中使用VB2005,相反亦然。
Inherits属性指定所继承类名,具有代表性的如代码隐藏文件中的类。
Description属性接受对应用程序的文本描述,而分析器和编译器将会忽略它。
CodeBehind属性在Visual Studio .NET(非VS2005)中用来指定包含的代码隐藏文件。
Import Import指令仅包括一个Namespace属性。所指定名字空间被明确地导入应用程序中,使其所有的类和接口都可用。导入的名字空间可以是.NET Framework的一部分或者用户自定义的名字空间。
以下是一个典型的Import指令:
<%@ Import Namespace="System.Data" %>
只能有一个Namespace属性。如果需要导入多个名字空间,那么需要使用多个Import指令。
Assembly Assembly指令用于在编译过程中将一个程序集链接到当前应用程序。这样可以使所有程序集的类与接口对应用程序都是可用的。
提示:典型的程序集是.dll或.exe文件
由于在编译时引用程序集,所以可以使用Assembly指令绑定程序集,然后在运行时将其加载到应用程序池中。
位于应用程序集缓存(也就是位于bin目录和App_Code目录中的代码文件)中的程序集可自动连接到应用程序。因此,任何位于bin目录的程序集,或者由App_Code目录中的代码编译而来的任何程序集,都不需要使用Assembly指令实现连接。
Assembly指令包括两个属性:Name和Src。Name属性是一个字符串,表示连接到应用程序的程序集名字,它不能包含路径。Src属性则是指向源文件的路径(只能为相对路径),这些文件将被动态编译和连接。
每个程序集指令只能有一个属性。如果需要连接多个程序集,则应使用多个Assembly指令。
Assembly指令类似于:
<%@ Assembly Name="SomeAssembly" %>
<%@ Assembly Src="sources/SomeSourceFile.cs" %>
脚本块
典型的global.asax文件中包含大量代码,这些代码包含在以script标签起止的脚本块中:
<script runat="server">
-------
</script>
如果使用代码隐藏,虽然代码隐藏文件中的代码本身没有附加script标签,但包含在代码隐藏文件中的代码与脚本块中的代码是等效的。
脚本块中的代码可以包含事件处理程序或者方法,下文将对此进行讲解。
事件
如同Web页和控件可以公开事件一样,应用程序中的Application对象和 Session对象也能够公开事件。这些事件能被global.asax文件或指定的文件中的事件处理程序处理。例如,当应用程序开始执行时,触发 Application_Start事件;当应用程序结束时,触发Application_End事件。Application的某些事件是每当页面请求时触发,而其他一些事件,例如Application_Error,则仅在特定情况下触发。
以下是页面请求触发的所有事件,以触发顺序排序:
Application_BeginRequest
当ASP.NET开始处理每个请求时触发。在这个事件处理中的代码将在页面或者服务处理请求之前执行。
Application_AuthenticateRequest
在验证请求之前触发。(正如第12章介绍的,验证是确认用户就是他所说的那个人的过程)在这个事件处理程序的代码中允许实现自定义安全管道。
Application_AuthorizeRequest
在为请求授权之前触发。(授权是确定是否请求用户具有访问资源的权限的过程)在这个事件处理程序的代码中允许实现自定义安全管道。
Application_ResolveRequestCache
在ASP.NET确定是否应该生成新的输出,或者由缓存填充前触发。无论何种情况,都将执行该事件处理程序中的代码。
Application_AcquireRequestState
在获取会话状态之前执行。
Application_PreRequestHandlerExecute
在将请求发送到服务于请求的处理程序对象之前触发。当事件触发后,页面将由HTTP处理程序处理请求。
Application_PostRequestHandlerExecute
当HTTP处理程序与页面请求一起完成时触发。此时,Response对象将获得由客户端返回的数据。
Application_ReleaseRequestState
当释放和更新试图状态时触发。
Application_UpdateRequestCache
如果输出被缓存,那么缓存更新时将触发。
Application_EndRequest
当请求结束时执行。
Application_PreSendRequestHeaders
在向客户端发送HTTP头之前触发。如果启用响应缓存,这意味着直到所有数据都准备好(默认条件),都不会发送任何数据。该事件总是在Application_EndRequest事件之后。如果禁用响应缓存,那么无论何时将数据发送给客户端,都将触发该事件。响应控制由Page指令的一个属性,或者Web服务的WebMethod属性控制。
Application_PreSendRequestContent
向客户端发送HTTP内容之前触发。和Application_PreSendRequestHeaders事件一样,Application_PreSendRequestContent事件能否被触发取决于响应缓存是否可用。
以下列举应用程序事件,它们在特定条件下触发:
Application_Start
当应用程序启动时触发。当首次请求应用程序虚拟目录中的任何页面时,将启动应用程序,同时如果应用程序已经运行,则不触发该事件。
Application_End
应用程序结束时触发。无论何时修改了配置文件(global.asax、global.asax.cs、global.asax.vb或者web.config),或者服务器崩溃或者重启,应用程序都将结束。通常在该事件处理程序中执行清除功能的代码,例如关闭数据库连接。
Session_Start
每个会话开始时触发,这是放置具体会话代码的地方。
Session_End
会话结束时触发。它为保存存储在会话中的任何数据提供了机会。
Application_Disposed
当CLR从内存中移除应用程序时触发。
Application_Error
转载于:https://www.cnblogs.com/9421/archive/2010/01/13/1646508.html
转--global.asax文件(站点计数器)相关推荐
- ASP.NET中使用Global.asax文件
转:http://www.cnblogs.com/ly5201314/archive/2008/09/23/1296868.html ASP.NET中使用Global.asax文件 Global.as ...
- 在ASP.NET中使用Global.asax文件
文章关键字:ASP.Net,应用层,模块 概述 Global.asax 位于应用程序根目录下.虽然 Visual Studio .NET 会自动插入这个文件到所有的 ASP.NET 项目中,但是它实际 ...
- 使用ASP.NET Global.asax 文件
Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法.你可以使用这个文件实现应用程序安全性以及其它一些任务.下面让我们详细看 ...
- Global.asax 文件
Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,提供了一种在一个 中心位置响应应用程序级或模块级事件的方法.你可以使用这个文件实现应 用程序安全性以及其它一些任务. G ...
- Asp.Net中global.asax文件的描述
global.asax文件的作用: 1.定义Application级别,Session级别的变量,对象和数据: 2.定义在Application中的,基于Application,Session的事件: ...
- 使用 Global.asax 文件
作者:未知 请速与本人联系 Global.asax 文件 除了编写 UI 代码外,开发人员还可以将应用程序级别的逻辑和事件处理代码添加到他们的 Web 应用程序中.此代码不处理 UI 的生 ...
- 通过在Global.asax文件中配置Application来统计的方法
这是通过在Global.asax文件中配置Application来统计的方法...... using System; using System.Collections; using System.Co ...
- global.asax文件的作用
1.Global.asax 文件(也称为 ASP.NET 应用程序文件)是一个可选的文件,该文件包含响应 ASP.NET 或HTTP模块所引发的应用程序级别和会话级别事件的代码 2.Global.a ...
- Global.asax 文件的作用
Global.asax 文件(也叫做 ASP.NET 应用程序文件)是一个可选的文件,该文件包含响应 ASP.NET 或 HTTP 模块引发的应用程序级别事件的代码.Global.asax 文件驻留在 ...
- 关于Global.asax文件不被执行的问题
昨天在网站中添加一个网站计数器,用到了Global文件,用Application去存储计数,在Application的Start方法中首先取出表中原来的数据,在Session的Start方法中进行计数 ...
最新文章
- 什么是bps (bits per second)?—Vecloud微云
- pycharm 如何导入、导出设置?
- 今天,“场景赋能•驱动有数”,神策数据 2018 数据驱动大会在京成功举办
- Python入门笔记之闭包
- SQL server management 查询所有触发器
- linux7禁用ipv6,RHEL 7 及 CentOS 7 彻底禁用IPv6的方法
- 最小连通-(代码、分析、汇编)
- java流读取字符串_javaIO之字符流是怎么读取的?
- [ES6] 细化ES6之 -- 字符串的扩展
- js轮询导致服务器瘫痪_面试官:讲一下什么是负载均衡,什么是轮询策略随机策略哈希策略...
- Python调用Tushare抓取上证指数并作初步分析示例
- html制作幸运抽奖,基于canvas的jQuery幸运抽奖大轮盘插件
- SPSS调查问卷信度分析【011-2期】
- 改步数最新方法与工具,很好用
- java 拼音_JAVA实现汉字转换为拼音 pinyin4j/JPinyin
- Elasticsearch最佳实践之使用场景
- android 上传nexus_上传 Android aar 到 nexus 上
- 音乐文件自动整理工具
- 不会查看GIT版本历史?快收藏这个工具
- 智能可穿戴的时尚单品,到底是不是“智商税”?
热门文章
- Mac版IntelliJ IDEA上手的一些必要设置
- MacBook随机关机,无法正常工作,如何解决
- Python中各种括号的区别、用途及使用方法
- 大数据(7) - zookeeper的安装与使用
- [原创] 数据库小工具 (BatchESQL.exe)
- 重载 重载递增递和减运算符
- videojs--跨浏览器的HTML视频播放器(可自定义样式)
- 安装DevExpress QuantumGrid 4.5组件出现问题,急!!
- 最佳黑色背景的Visual Studio 2005/2008配置-尤其适合开发人员使用
- 网传字节跳动实习生删除GB以下所有机器学习模型,差点没上头条......