ASP.NET Счетчик посетителей - PullRequest
1 голос
/ 27 сентября 2011

Я создаю счетчик для моей веб-страницы.Чего не следует достигать, так это того, что каждый раз, когда пользователь посещает мое приложение asp.net, оно сохраняет свои данные в базе данных.Я использую Global.asax и событие Application_Start.Вот мой код

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

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

Но он никогда ничего не сохраняет в базе данных.Функция SaveVisitor была протестирована и работает.

Есть предложения?

Ответы [ 4 ]

4 голосов
/ 27 сентября 2011

Application_Start() вызывается только один раз за время существования домена приложения - не для каждого запроса на ваш сайт. Также см. "Обзор жизненного цикла приложений ASP.NET для IIS 5.0 и 6.0"

3 голосов
/ 03 мая 2012

Код для кода:

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>

2 голосов
/ 27 сентября 2011

Application_Start запускается только при создании процесса, а не при каждом посещении.

Вместо него можно использовать Application_BeginRequest.

1 голос
/ 27 сентября 2011

Эта информация может регистрироваться IIS, а затем запрашиваться / преобразовываться с использованием превосходного logparser .Вы также можете разместить Google Analytics на своем сайте - бесплатной версии достаточно для всех, кроме самых загруженных сайтов.Если вы все еще чувствуете необходимость сделать это самостоятельно, тогда лучше записать Application_BeginRequest.

РЕДАКТИРОВАТЬ : вы можете реализовать его как модуль, например Пошаговое руководство по пользовательскому модулю MSDN , и тогда ваше приложение может стать немного более модульным

...