Tengo un servicio WCF alojado en IIS/ASP.NET que acepta publicación HTTP (no formada en la publicación) de objetos serializados.Captura de datos HTTP POST sin formato durante la excepción
Si el cliente envía solicitudes mal formadas (p. Ej., No están serializando el objeto correctamente) me gustaría registrar el mensaje enviado.
Ya estamos utilizando ELMAH para capturar excepciones no controladas, por lo que simplemente adjuntar los datos de la publicación sería la opción más fácil.
Puedo obtener el HttpContext actual durante una excepción, sin embargo, esto solo contiene la información del encabezado HTTP.
Mi pregunta es esta: ¿hay alguna forma de capturar el cuerpo original de la solicitud HTTP POST? O, en su defecto, ¿una forma mejor (sin un proxy inverso) de capturar la entrada que causó el error?
Editar: Solo para aclarar, la ejecución a nivel de paquete de captura en todo momento no es realmente adecuada. Estoy buscando una solución que pueda implementar en servidores de Producción, y que tendrá clientes fuera de nuestro control o capacidad para monitorear.
Edición n. ° 2: se hizo una sugerencia para acceder al Request.InputStream; esto no funciona si intenta leer después de que WCF haya leído la solicitud fuera de la transmisión.
Aquí hay una muestra de código para ver cómo he intentado usar esto.
StringBuilder log = new StringBuilder();
var request = HttpContext.Current.Request;
if (request.InputStream != null)
{
log.AppendLine(string.Format("request.InputStream.Position = \"{0}\"", request.InputStream.Position));
if (request.InputStream.Position != 0)
{
request.InputStream.Seek(0, System.IO.SeekOrigin.Begin);
}
using (StreamReader sr = new StreamReader(request.InputStream))
{
log.AppendLine(string.Format("Original Input: \"{0}\"", sr.ReadToEnd()));
}
}
else
{
log.AppendLine("request.Inputstream = null");
}
log.ToString();
que la salida de log.ToString() es:
request.InputStream.Position = "0" Original Input: ""
El "uso" con StreamReader dará como resultado System.Web.Request.InputStream está dispuesto (lo que significa que los datos se pierden). – Jeff
Los datos ya están perdidos. –