这个文件名一定不能改!!!
放在文件根目录下!
web应用程序第一次启动时调用该方法,只执行一次,后续用户的请求都不会执行这个方法,
网站 web应用程序的入口 ,不是.net entif..w 入口 ,相当于winform Main函数,这个winform程序的入口
完成整个web应用程序配置
Application_BeginRequest 代表请求管道的第一个事件
如果想注册第2个事件,在Application_BeginRequest方法下写一个方法 (注意签名,命名规范)
重点方法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /// <summary> 2 /// 全局的异常处理点.捕获异常信息 3 /// (如果其他页面出错,都会跳到这个页面) 4 /// 若页面方法中有try catch 它就不跳到这个方法了 5 /// </summary> 6 /// <param name="sender"></param> 7 /// <param name="e"></param> 8 protected void Application_Error(object sender, EventArgs e) 9 { 10 //捕获异常信息 返回一个异常对象 11 Exception ex =HttpContext.Current.Server.GetLastError(); 12 //日志一般用开源组件记录 //Log4Net 开源组件 13 // ex.Message 14 }
不允许多人同时处理一个文件,所以就需要一把"锁",但是这样性能会变差,因为一个用户写数据,其他人只能干等,这是"队列"就出来了
往"队列"写数据,先把你的数据放在内存里,你就可以做饭去了
队列是对内存的操作,特点:速度快
操作系统提供概念: 生产者消费者模式 来解决高并发,队列解决
使用管道事件注册一个方法或使用
1.自己定义一个类
2.在global里写
开源项目
定时任务框架
Global类下方法使用
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Security; 6 using System.Web.SessionState; 7 8 namespace Web 9 { 10 public class Global : System.Web.HttpApplication 11 { 12 /// <summary> 13 /// web应用程序第一次启动时调用该方法,并且该方法只被调用一次 14 /// 用户把网站部署iis上 15 /// </summary> 16 /// <param name="sender"></param> 17 /// <param name="e"></param> 18 protected void Application_Start(object sender, EventArgs e) 19 { 20 21 22 } 23 /// <summary> 24 /// 开始会话.(用户通过浏览器第一次访问我们网站的页面,这时建立会话,服务器返回这个SessionId给浏览器,但是当该用户 25 /// 通过浏览器再次访问其他的页面带这SessionId时,该方法不会被执行. 26 /// 若用户关掉浏览器重新打开,那重新执行该方法 27 /// ) 28 /// </summary> 29 /// <param name="sender"></param> 30 /// <param name="e"></param> 31 protected void Session_Start(object sender, EventArgs e) 32 { 33 //统计页面访问人数 34 //Application也是一种状态保持机制,放在该对象中的数据是共享的. 35 //Cache 也是共享的,微软内部实现加锁解锁机制 36 Application.Lock(); 37 int count = Convert.ToInt32(Application["count"]); 38 count++; 39 Application["count"] = count; 40 Application.UnLock();//必须要加锁解锁 41 } 42 43 protected void Application_BeginRequest(object sender, EventArgs e) 44 { 45 46 } 47 48 protected void Application_AuthenticateRequest(object sender, EventArgs e) 49 { 50 51 } 52 /// <summary> 53 /// 全局的异常处理点.捕获异常信息 54 /// (如果其他页面出错,都会跳到这个页面) 55 /// 若页面方法中有try catch 它就不跳到这个方法了 56 /// </summary> 57 /// <param name="sender"></param> 58 /// <param name="e"></param> 59 protected void Application_Error(object sender, EventArgs e) 60 { 61 //捕获异常信息 返回一个异常对象 62 Exception ex =HttpContext.Current.Server.GetLastError(); 63 //日志一般用开源组件记录 //Log4Net 开源组件 64 // ex.Message 65 } 66 /// <summary> 67 /// 会话结束,用户关浏览器不会执行,20分钟后这个用户没有对服务器发请求,服务器才执行此方法 68 /// </summary> 69 /// <param name="sender"></param> 70 /// <param name="e"></param> 71 protected void Session_End(object sender, EventArgs e) 72 { 73 Application.Lock(); 74 int count = Convert.ToInt32(Application["count"]); 75 count--; 76 Application["count"] = count; 77 Application.UnLock();//必须要加锁解锁 78 } 79 /// <summary> 80 /// 很多情况这个情况没方法调用 81 /// </summary> 82 /// <param name="sender"></param> 83 /// <param name="e"></param> 84 protected void Application_End(object sender, EventArgs e) 85 { 86 87 } 88 } 89 }