2010-08-19 17 views
22

Necesito registrar la carga útil de la solicitud para las solicitudes realizadas a IIS. ¿Es posible configurar el registro de las cargas útiles de la solicitud con el registro existente y los módulos avanzados de registro dentro de IIS 7.5 o puede alguien dirigirme a cualquier módulo personalizado que me permita registrar la carga útil de la publicación.IIS 7 Cuerpo de solicitud de registro

Respuesta

13

En realidad, puede ser hecho, de acuerdo con https://serverfault.com/a/90965, que, irónicamente, es una respuesta a la pregunta que David Silva Smith vinculado a en su respuesta aquí, alegando que no se puede hacer;)

El IIS los registros solo registran la información de la querystring y el encabezado sin datos POST.

Si está utilizando IIS7, puede habilitar el seguimiento de solicitudes fallidas para código de estado 200. Eso registrará todos los datos y puede seleccionar qué tipo de datos incluir.

+1

no ve el cuerpo de la petición de esta manera todos modos ... Sólo encabezado y algo de información de diagnóstico. – Azimuth

+4

@Azimuth No he verificado esto, pero aparentemente estos campos contienen el cuerpo http de solicitud y respuesta, respectivamente: 'GENERAL_REQUEST_ENTITY' y' GENERAL_RESPONSE_ENTITY_BUFFER' –

+5

@Azimuth es incorrecto. Configuré el seguimiento de solicitud fallida y recuperé todo el cuerpo POST. Me ayudó a descubrir exactamente qué se enviaba a mi API: http://blogs.msdn.com/b/benjaminperkins/archive/2012/01/02/enable-and-activate-failed-request-tracing-rules.aspx ? Redirigido = verdadero –

4

me las arreglé para crear un archivo de texto para mis peticiones que contenía toda la solicitud y la respuesta (cabeceras), sólo lo utilizaron para registrar las peticiones específicas de correos:

protected void Application_BeginRequest(Object Sender, EventArgs e) 
{ 
    string uniqueid = Guid.NewGuid().ToString(); 
    string logfile = String.Format("C:\\path\\to\\folder\\requests\\{0}.txt", uniqueid); 
    Request.SaveAs(logfile, true); 
} 

Esperemos que esto le ayude!

0

Aquí está el código del módulo HTTP personalizado que usamos para registrar los datos de solicitud HTTP POST.

using System; 
using System.Web; 

namespace MySolution.HttpModules 
{ 
    public class HttpPOSTLogger : IHttpModule 
    { 

        public void Dispose() 
        { 
        } 

        public void Init(HttpApplication context) 
        { 
            context.BeginRequest += new EventHandler(context_BeginRequest); 
        } 

        private void context_BeginRequest(object sender, EventArgs e) 
        { 
            if (sender != null && sender is HttpApplication) 
            { 
                var request = (sender as HttpApplication).Request; 
                var response = (sender as HttpApplication).Response; 

                if (request != null && response != null && request.HttpMethod.ToUpper() == "POST") 
                { 
                    var body = HttpUtility.UrlDecode(request.Form.ToString()); 
                    if (!string.IsNullOrWhiteSpace(body)) 
                        response.AppendToLog(body); 
                } 
            } 
        } 

    } 
} 

No olvide registrarlo en la web.config de su aplicación.

sección

Uso system.webServer para IIS Modelo Integrado

<system.webServer> 
    <modules> 
      <add name="HttpPOSTLogger" type="MySolution.HttpModules.HttpPOSTLogger, MySolution.HttpModules" /> 
    </modules> 
</system.webServer> 

sección Uso system.web para IIS modelo clásico

<system.web> 
    <httpModules> 
   <add name="HttpPOSTLogger" type="MySolution.HttpModules.HttpPOSTLogger, MySolution.HttpModules"/> 
  </httpModules> 
</system.web> 

registro de IIS Antes de aplicar el módulo:

::1, -, 10/31/2017, 10:53:20, W3SVC1, machine-name, ::1, 5, 681, 662, 200, 0, POST, /MySolution/MyService.svc/MyMethod, -, 

IIS registro Después de aplicar el módulo:

::1, -, 10/31/2017, 10:53:20, W3SVC1, machine-name, ::1, 5, 681, 662, 200, 0, POST, /MySolution/MyService.svc/MyMethod, {"model":{"Platform":"Mobile","EntityID":"420003"}}, 

Artículo completo:

https://www.codeproject.com/Tips/1213108/HttpModule-for-logging-HTTP-POST-data-in-IIS-Log

Cuestiones relacionadas