Estoy escribiendo un servicio web (usando ASP.NET MVC) y para fines de soporte, nos gustaría poder registrar las solicitudes y la respuesta lo más cerca posible del formato sin formato en el cable (es decir, incluido HTTP método, ruta, todos los encabezados y el cuerpo) en una base de datos.
De lo que no estoy seguro es de cómo obtener estos datos de la manera menos 'destrozada'. Puedo reconstituir el aspecto que creo que tiene la solicitud al inspeccionar todas las propiedades del HttpRequest
objeto y construir una cadena a partir de ellos (y de manera similar para la respuesta), pero realmente me gustaría obtener los datos reales de solicitud / respuesta que están enviado por cable.
Me complace utilizar cualquier mecanismo de intercepción, como filtros, módulos, etc., y la solución puede ser específica para IIS7. Sin embargo, preferiría mantenerlo solo en código administrado.
¿Alguna recomendación?
Editar: Observo que HttpRequest
tiene un SaveAs
método que puede guardar la solicitud en el disco, pero esto reconstruye la solicitud desde el estado interno utilizando una carga de métodos auxiliares internos a los que no se puede acceder públicamente (bastante por qué esto no permite guardar en un archivo proporcionado por el usuario corriente no lo sé). Así que parece que tendré que hacer todo lo posible para reconstruir el texto de solicitud / respuesta de los objetos ... gemido.
Edición 2: Tenga en cuenta que dije toda la solicitud, incluido el método, la ruta, los encabezados, etc. Las respuestas actuales solo miran las secuencias del cuerpo que no incluyen esta información.
Edición 3: ¿Nadie lee las preguntas por aquí? Cinco respuestas hasta el momento y, sin embargo, ninguna sugiere siquiera una forma de obtener toda la solicitud cruda en el cable. Sí, sé que puedo capturar las secuencias de salida y los encabezados y la URL y todas esas cosas del objeto de solicitud. Ya dije eso en la pregunta, ver:
Puedo reconstituir lo que creo que se ve la solicitud al inspeccionar todas las propiedades del objeto HttpRequest y construir una cadena a partir de ellas (y de manera similar para la respuesta), pero realmente me gustaría obtener los datos reales de solicitud / respuesta eso se envía por cable.
Si sabe que los datos sin procesar completos (incluidos los encabezados, la URL, el método http, etc.) simplemente no se pueden recuperar, sería útil saberlo. Del mismo modo, si sabe cómo obtenerlo todo en formato sin formato (sí, todavía me refiero a incluir encabezados, url, método http, etc.) sin tener que reconstruirlo, que es lo que pedí, entonces sería muy útil. Pero decirme que puedo reconstruirlo desde los objetos HttpRequest
/ HttpResponse
no es útil. Yo sé eso. Ya lo dije
Tenga en cuenta: antes de que alguien comience a decir que es una mala idea, o limitará la escalabilidad, etc., también implementaremos mecanismos de aceleración, entrega secuencial y antirrepetición en un entorno distribuido, por lo que se requiere el registro de la base de datos de todos modos. No estoy buscando una discusión sobre si esta es una buena idea, estoy buscando cómo se puede hacer.