2010-12-16 6 views
0

Ive einen http-Handler-Stecker in unseren Seiten geschrieben, dass ich dieWenn ich einen Handler verwende, wie schreibe ich ein Protokoll einmal pro Runde?

HttpContext.Current.Request.UrlReferrer 

an einem Tisch nur einmal pro rountrip für grundsätzlich Seite Protokollierung schreiben können, wollen.

Der vollständige Code ist:

void context_AcquireRequestState(object sender, EventArgs e) 
    { 
     //Will avoid the scenario where session has not been instantiated 
     //on W3SVC restart 
     if (HttpContext.Current.Session != null) 
     { 

       WebLogging weblogger = new WebLogging(); 

       if (HttpContext.Current.Session[EnumsAndConstants.Keys.UserId] != null) 
       { 
        weblogger.UserId = (int)HttpContext.Current.Session[EnumsAndConstants.Keys.UserId]; 
       } 

       if (HttpContext.Current.Request.UrlReferrer != null) 
       { 
        weblogger.UrlReferrer = HttpContext.Current.Request.UrlReferrer.ToString(); 
       } 

       //Will always have a value 
       weblogger.RequestType = HttpContext.Current.Request.RequestType; 

       statisticsManager.CreateWebLogging(weblogger); 

     } 

    } 

Dies scheint ein Protokoll für die Seite und jede Kontrolle pro Rundreise wie im immer mehrere Protokolle zu schreiben.

Also wie kann ich den Code ändern, um nur einmal pro Rundreise zu passieren.

Ich muss dafür ein HTTP-Modul verwenden.

Antwort

0

Hoffentlich wird jemand anderes antworten, wenn es einen definitiveren Weg gibt, aber ich glaube nicht, dass es eine Sache gibt, die Sie leicht überprüfen können, um zu bekommen, was Sie wollen.

Sie sagen, dass Sie "einmal pro Rundreise" anmelden möchten, tun Sie das jetzt ziemlich genau. Wenn ein Browser eine URL anfordert, erhält er eine HTML-Antwort vom Server. Wenn der Browser diese Seite rendert, kommt er auf externe Ressourcen, die er benötigt (Bilder, Stylesheets, Javascript-Dateien usw.). Für jede von diesen muss sie eine weitere Anfrage an den Server stellen, um sie zu erhalten. Aus diesem Grund protokollieren Sie so viele Anfragen, weil Sie für jede eine Anmeldung durchführen.

Eine Sache, die Sie zu reduzieren auf den Lärm aussehen kann (vorausgesetzt, Sie sind nicht daran interessiert, wenn ein Browser die Ressourcendateien anfordert) auf dem folgenden Gut aussehen:

System.Web.HttpContext.Current.Request.CurrentExecutionFilePathExtension 

Diese Sie erhalten die Dateierweiterung der aktuellen Anfrage (unter der Annahme, dass es eine gibt, sieht es so aus, als ob sie eine leere Zeichenfolge verwendet). Sie können also dem Modul einen Filtermechanismus hinzufügen, um bestimmte Erweiterungen (.jgp, .gif, .png, .js, .css usw.) herauszufiltern.

Verwandte Themen