asp.net - Cómo depurar UrlRewriter.NET?
url-rewriting (3)
Intenta ejecutar DebugView para leer los mensajes de Intelligencia.UrlRewriter
Obtenlo aquí http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx
Veo el código fuente, y creo que eso funciona, pero si no funciona, ¿por qué no obtener el código fuente y compilarlo con su proyecto y simplemente depurarlo en el sitio?
He revisado su página de ayuda, parece que puedo registrar un registrador de depuración que genera información en la ''ventana estándar de depuración de ASP.NET''. Mi problema es que no sé lo que eso significa, si eso significa que la ventana de salida de depuración en Visual Studio (donde ve el resultado de compilación, depuración y más) no veo ningún resultado de depuración de UrlRewriter.
Las reglas funcionan (principalmente). Solo quiero obtener más resultados de depuración para solucionar problemas.
Agregué la llamada de registro a la sección de reescritura de esta manera:
<rewriter>
<register logger="Intelligencia.UrlRewriter.Logging.DebugLogger, Intelligencia.UrlRewriter" />
....
</rewriter>
Estoy alojando este sitio web localmente en IIS en Vista, para depurarlo adjunto el depurador al proceso w3wp.
Otras partes seleccionadas de la web.config "
<compilation debug="true">
<assemblies>
...
</assemblies>
</compilation>
<trace enabled="true"/>
¿Dónde debería ver la salida de depuración de UrlRewriter.NET? Si está en la ventana de salida de depuración de Visual Studio, ¿alguna idea de por qué no la veo allí?
Para cualquiera que quiera registrar los mensajes de eventos en un archivo y verlos en la ventana de salida de depuración, aquí hay un fragmento de código que he creado.
Utilice esto solo en un entorno de desarrollo, este código no está optimizado.
uso:
En su aplicación asp.net, agregue una referencia a esta biblioteca (MyPresentationLayer.Web).
Agregue el siguiente elemento al nodo ''reescritor'':
<register logger="IntelligenciaExt.Web.Logging.UrlRewriterIntelligencia.FileLogger, IntelligenciaExt.Web"/>
Por defecto, el archivo de registro se puede encontrar fuera de su carpeta ''www'', en la subcarpeta ''intelligenciaLog''.
using System;
using SysDiag = System.Diagnostics;
using System.IO;
using Intelligencia.UrlRewriter.Logging;
namespace MyPresentationLayer.Web.Logging.UrlRewriterIntelligencia
{
/// <summary>
/// Custom logger for Intelligencia UrlRewriter.net that logs messages
/// to a plain text file (../intelligenciaLog/log.txt).
/// </summary>
public class FileLogger : IRewriteLogger
{
private const string _logFolderName = "../intelligenciaLog";
private const string _logFileName = "log.txt";
private const string _appName = "UrlRewriterIntelligencia.FileLogger";
public FileLogger()
{
LogToFile(Level.Info, "Created new instance of class ''FileLogger''");
}
public void Debug(object message)
{
LogToFile(Level.Debug, (string)message);
}
public void Error(object message, Exception exception)
{
string errorMessage = String.Format("{0} ({1})", message, exception);
LogToFile(Level.Error, errorMessage);
}
public void Error(object message)
{
LogToFile(Level.Error, (string)message);
}
public void Fatal(object message, Exception exception)
{
string fatalMessage = String.Format("{0} ({1})", message, exception);
LogToFile(Level.Fatal, fatalMessage);
}
public void Info(object message)
{
LogToFile(Level.Info, (string)message);
}
public void Warn(object message)
{
LogToFile(Level.Warn, (string)message);
}
private static void LogToFile(Level level, string message)
{
string outputMessage = String.Format("[{0} {1} {2}] {3}", DateTime.Now.ToString("yyyyMMdd HH:mm:ss"),
_appName.PadRight(50, '' ''), level.ToString().PadRight(5, '' ''),
message);
SysDiag.Debug.WriteLine(outputMessage);
try
{
string pathToLogFolder =Path.Combine(AppDomain.CurrentDomain.BaseDirectory, _logFolderName);
if (!Directory.Exists(pathToLogFolder))
{
Directory.CreateDirectory(pathToLogFolder);
}
string fullPathToLogFile = Path.Combine(pathToLogFolder, _logFileName);
using (StreamWriter w = File.AppendText(fullPathToLogFile))
{
w.WriteLine(outputMessage);
// Update the underlying file.
w.Flush(); // Close the writer and underlying file.
w.Close();
}
}
catch (Exception) { }
}
internal enum Level
{
Warn,
Fatal,
Info,
Error,
Debug
}
}
}
Quería depurar porque tenía la impresión de que mis reglas de reescritura no funcionaban.
Después de un tiempo, descubrí que tenía que modificar mi web.config y agregar la siguiente línea a la sección ''system.web'', ''httpModules'':
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>