2011-09-27 70 views
1

我正在爲我的網頁創建一個計數器。無論如何,每次用戶訪問我的asp.net應用程序時,都會將其數據存儲到數據庫中。我正在使用Global.asax和事件Application_Start。這是我的代碼。ASP.NET訪客計數器

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     RegisterRoutes(RouteTable.Routes); 

     WebpageCounter.SaveVisitor(new WebpageVisitor() 
     { 
      VisitorIP = HttpContext.Current.Request.UserHostAddress, 
      VisitedOn = DateTime.Now 
     }); 
    } 

但它從不將任何東西存儲到數據庫中。 SaveVisitor函數已經過測試並且功能正常。有什麼建議麼 ?

感謝

+1

另請參閱該SO螺紋:http://stackoverflow.com/questions/669049/implementing-a-visitor-counter – BrokenGlass

回答

2

Application_Start僅在進程創建時運行 - 不是每次訪問。

您可以改用Application_BeginRequest。

+0

因此,這我必須使用的事件?或者在哪裏放置我的代碼? –

1

此信息可以由IIS記錄,然後使用優秀的logparser查詢/轉換。你也可以將谷歌分析放到你的網站上 - 它的免費版本已經足夠用於除最繁忙網站之外的所有網站。如果你仍然覺得自己需要這樣做,那麼Application_BeginRequest是一個更好的地方來記錄這一點。

編輯:您可以實現它作爲一個模塊,如the MSDN Custom Module Walkthrough,然後你的應用程序可能會多一點模塊化

+0

保護無效的Application_BeginRequest() { WebpageCounter.SaveVisitor(新WebpageVisitor() { VisitorIP = HttpContext.Current.Request.UserHostAddress, VisitedOn = DateTime.Now }); } –

+0

仍然不能正常工作 –

+0

您使用的是哪個版本的IIS? –

3

代碼後面的代碼:

C#

protected void Page_Load(object sender, EventArgs e) 
    { 
     this.countMe(); 

     DataSet tmpDs = new DataSet(); 
     tmpDs.ReadXml(Server.MapPath("~/counter.xml")); 

     lblCounter.Text = tmpDs.Tables[0].Rows[0]["hits"].ToString(); 
    } 

    private void countMe() 
    { 
     DataSet tmpDs = new DataSet(); 
     tmpDs.ReadXml(Server.MapPath("~/counter.xml")); 

     int hits = Int32.Parse(tmpDs.Tables[0].Rows[0]["hits"].ToString()); 

     hits += 1; 

     tmpDs.Tables[0].Rows[0]["hits"] = hits.ToString(); 

     tmpDs.WriteXml(Server.MapPath("~/counter.xml")); 

    } 

VB.NET

Protected Sub Page_Load(sender As Object, e As EventArgs) 
     Me.countMe() 

     Dim tmpDs As New DataSet() 
     tmpDs.ReadXml(Server.MapPath("~/counter.xml")) 

     lblCounter.Text = tmpDs.Tables(0).Rows(0)("hits").ToString() 
    End Sub 

    Private Sub countMe() 
     Dim tmpDs As New DataSet() 
     tmpDs.ReadXml(Server.MapPath("~/counter.xml")) 

     Dim hits As Integer = Int32.Parse(tmpDs.Tables(0).Rows(0)("hits").ToString()) 

     hits += 1 

     tmpDs.Tables(0).Rows(0)("hits") = hits.ToString() 

     tmpDs.WriteXml(Server.MapPath("~/counter.xml")) 
    End Sub 

XML文件將是這樣的:

<?xml version="1.0" encoding="utf-8" ?> 
<counter> 
    <count> 
    <hits>0</hits> 
    </count>