<%@ page language="c#"  EnableSessionState="True" %>
<%--
counter.aspx
这个文件包含的是计数器的代码，这个文件是展示了如何打开、读、写一个XML文件
--%>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Data" %>
<%-- 为了运行计数器而引入的集合和命名空间 --%>
<html>

<head>

<title> 第四十三例 基于XML的计数器</title>

 <script language="C#" runat="server">
//这个脚本当页面装载时候执行
 public void Page_Load(Object src, EventArgs e)
 {
  //该路径下的 Xml文件将要包含所有的数据
  //我们可以修改该文件的路径
   string dataFile="db/xmlcounter.xml" ;
			
   if(!Page.IsPostBack){
   //try-catch 模块包含了计数器的代码
   try {

     DataSet counterData = new DataSet();
     //这个是非常重要的对于指定"FileShare.ReadWrite" 的选项.
     //允许其它的使用者读写这个数据库
     FileStream dataIn ;
     dataIn = new FileStream(Server.MapPath(dataFile), FileMode.Open, FileAccess.Read, FileShare.ReadWrite) ;
     counterData.ReadXml(dataIn);
     dataIn.Close();	
     
     

     //更新数据库当有新的 session 在这里的时候				
     if(Session["counter"]==null)
     {
       //创建一个新的数据行从 DataSet schema
       DataRow newRow = counterData.Tables[0].NewRow();
       
       //加入数据
       newRow["UserAgent"]=Request.UserAgent ;
       newRow["UserHostAddress"]=Request.UserHostAddress ;
       newRow["UserHostName"]=Request.UserHostName;
       HttpBrowserCapabilities bc = Request.Browser;
       newRow["BrowserType"]=bc.Type;
       newRow["BrowserName"]=bc.Browser;
       newRow["MajorVersion"]=bc.MajorVersion.ToString() ;
       newRow["MinorVersion"]=bc.MinorVersion.ToString();
       newRow["Platform"]=bc.Platform;
       DateTime now = DateTime.Now ;
       newRow["Date"]=now.ToShortDateString();
       newRow["Time"]=now.ToShortTimeString();
       counterData.Tables[0].Rows.Add(newRow);
       FileStream dataOut ;
       //保存更新过的文件到磁盘!
       dataOut = new FileStream(Server.MapPath(dataFile), FileMode.Open, FileAccess.Write, FileShare.ReadWrite) ;
       counterData.WriteXml(dataOut, XmlWriteMode.WriteSchema);
       dataOut.Close();
       //设置一个 Session 变量
       Session["counter"]="Set" ;
            
     }
     countMsg.Text+=counterData.Tables[0].Rows.Count.ToString();
      
    }
    catch(Exception edd)
    {
      //捕捉到例外的时候
      Response.Write("<font color=#FF0000>An Exception Occurred "+edd.ToString()+"</font>") ;
    }
		
  }
}
	
</script>
</head>

<body >

<h3><font face="Verdana"> 第四十三例 基于XML的计数器 </font></h3><br> 
<br>
<p align="center">
这是一个简单的计数器
</p>
<asp:Label   text="您的访问排行: " style="font-size:20pt" id="countMsg" runat="server" />

<br>
<br>
</body>

</html>
