Poco éxito módulo de seguimiento para .TEXT 0.95 blogs...
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:
<httpMódulos> <añadir nombre="RequestLogger" type="ExtraControls.ViewTrackModule, ExtraControls"/> </httpMódulos>