# Poco éxito módulo de seguimiento para .TEXT 0.95 blogs...

<datetime class="hidden">2004-07-06T00:00</datetime>

<!-- category -- mostlylucidcouk, Imported -->
OK, terriblemente documentado, pero funciona... esta es sólo la fuente para un poco HttpModule que pistas golpea a un blog .TEXT - bastante simple, pero debe dar a cualquiera que quiera hacerlo un comienzo. Publicaré una versión más completa en algún momento (principalmente sólo quiero probar cómo se comporta esta piel con el código publicado ;-))

utilizando el sistema;

utilizando System.Web;

utilizando System.Data;

utilizando System.Data.SqlClient;

utilizando Dottext.Framework;

utilizando System.Colections.Specialized;

utilizando System.IO;

utilizando System.Text;

utilizando System.Xml.Serialization;

usando System.Threading;

utilizando System.Net;

usando Microsoft.ApplicationBlocks.Data;

namespace ExtraControls

{

///

/// Resumen de la descripción de ViewTrackModule.

///

clase pública ViewTrackModule : IHttpModule

{

#Region IHttpMembersModule

Init(HttpApplication context)

{

context.EndRequest = new EventHandler(context\_EndRequest);

}

vacío público Deseche()

{

// TODO: Añadir ViewTrackModule.

}

#endregion

///

/// Ok, poco inusual... pero necesito que el objeto BlogConfig esté disponible para el acceso DB...

///

///

///

contexto de vacío privado\_EndRequest(enviador de objetos, EventArgs e)

{

HttpApplication httpApp = remitente como HttpApplication;

System.Uri ur = httpApp.Request.UrlReferrer;

string testHost = string.Empty;

string thisHost = httpApp.Request.ServerVariables["SERVER\_NAME"];

if(ur != null)

{

testHost = ur.Host;

}

if(testHost != thisHost)

{

HttpRequest re = httpApp.Request;

LogToDBDel del = nuevo LogToDBDel (LogToDB);

IAsyncResult ar = del.BeginInvoke(re,null,null);

}

}

delegate private void LogToDBDel(HttpRequest re);

vacío privado LogToDB(HttpSolicitar re)

{

cadena m\_conexiónString = Dottext.Framework.Configuration.BlogConfigurationSettings.Instance().BlogProviders.DbProvider.ConnectionString;

string clientIP = re.UserHostAddress;

if(!clientIP.StartsWith("192.") & !clientIP.StartsWith("10."))

{

string clientUserAgent = re.UserAgent;

string clientReferer = re.ServerVariables["HTTP\_REFERENCIA"];

string clientHostName = string.Empty;

Intente

{

clientHostName = Dns.GetHostByAddress(clientIP).HostName;

}

captura (excepción)

{

clientHostName = re.UserHostName;

}

string clientQueryString = re.RawUrl;

SqlParameter[] sqlParams = SqlHelperParameterCache.GetSpParameterSet(m\_conexiónString, "pr\_Blog\_SaveEntryStats");

sqlParams[0].Value = clientIP;

sqlParams[1].Valor = clienteUserAgent;

sqlParams[2].Value = clientHostName;

sqlParams[3].Value = clientQueryString;

sqlParams[4].Valor = DateTime.Now;

sqlParams[5].Value = clientReferer;

Intente

{

SqlHelper.EjecutarNonQuery(m\_conexiónString, CommandType.StoredProcedure, "pr\_Blog\_SaveEntryStats", sqlParams) ;

}

captura (excepción)

{

}

}

}

}

}

Como de costumbre, esto necesita una entrada en la web.config para enganchar en el módulo:

&lt;httpMódulos&gt;
&lt;añadir nombre="RequestLogger" type="ExtraControls.ViewTrackModule, ExtraControls"/&gt;
&lt;/httpMódulos&gt;