ASP.NET WebForm 09 Application 对象

Posted by 古承风 on July 26, 2019

相比于前两个 生命周期更长

1. 应用场景

  • 如何统计一个站点的访问次数

2. Application 特征

  • 位置:服务器内存,执行速度快
  • 使用范围:整个应用程序
  • 类型:任意类型
  • 生命周期:应用程序开始创建到销毁

使用方法与Session对象一样为键值对方式

3. aspx全局应用程序类:

  • 必须放在程序根目录下
  • 处理应用程序级事件的可选文件
常用事件 说明
Application_start 接受第一个请求时触发
Application_end 应用程序结束时触发
Session_Start 某用户第一次访问时触发
Session_End 某用户退出应用程序时触发

4. 实战 : 统计多少人在线,多少人访问

  • 添加全局应用应用程序类

    • 右击项目
    • 添加
    • 新建项
    • 全局应用程序类

在全局应用程序类中包含有在不同的Application状态下对应的方法. 这个实例的背景是统计实时在线人数以及总访问量.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;

namespace Application
{
    public class Global : System.Web.HttpApplication
    {

        protected void Application_Start(object sender, EventArgs e)
        {
            Application.Lock();
            Application["UserVisit"] = 0;//网站被访问的次数
            Application["CurrentUsers"] = 0;//在线的人数
            Application.UnLock(); 
        }

        protected void Session_Start(object sender, EventArgs e)
        {
            Application.Lock();
            Application["UserVisit"] = (int)Application["UserVisit"]+1;//网站被访问的次数
            Application["CurrentUsers"] = (int)Application["CurrentUsers"] + 1;//在线的人数
            Application.UnLock();
        }

        protected void Application_BeginRequest(object sender, EventArgs e)
        {
            
        }

        protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {

        }

        protected void Application_Error(object sender, EventArgs e)
        {

        }

        protected void Session_End(object sender, EventArgs e)
        {
            //在会话结束的时候运行的代码
            //注意:在web.config文件中,把Sessionstate模式设置为InPro时才引发此事件
            Application.Lock();

            Application["CurrentUsers"] = (int)Application["CurrentUsers"] - 1;

            Application.UnLock();
        }

        protected void Application_End(object sender, EventArgs e)
        {
            
        }
    }
}

Default.aspx 和 Default.aspx.cs的代码分别如下:


ult<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Application.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Label ID="Info" runat="server" Text="您是本站的第1位访客"></asp:Label>
            <%--<asp:TextBox ID="Info" runat="server"></asp:TextBox>--%>
            <hr />
            <asp:Button ID="btnClear" runat="server" OnClick="btnClear_Click" Text="清除"/>

        </div>
    </form>
</body>
</html>

Default.aspx


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Application
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if(!IsPostBack)
            {
                this.Info.Text = "您是本站的第" + Application["UserVisit"].ToString() + "位访客"
                    + "当前在线人数为:" + Application["CurrentUsers"].ToString();
                    
            }
        }

        protected void btnClear_Click(object sender, EventArgs e)
        {
            Session.Abandon();
        }
    }
}