Registrazione della richiesta / risposta HTTP non elaborata in ASP.NET MVC e IIS7

Sto scrivendo un servizio web (usando ASP.NET MVC) e per motivi di supporto vorremmo essere in grado di registrare le richieste e le risposte nel modo più vicino ansible al formato raw e on-the-wire (cioè includendo HTTP metodo, percorso, tutte le intestazioni e il corpo) in un database.

Quello di cui non sono sicuro è come ottenere questi dati nel modo meno “mutilato”. Posso ri-costituire ciò in cui credo che la richiesta assomigli ispezionando tutte le proprietà dell’object HttpRequest e costruendo una stringa da loro (e similmente per la risposta) ma mi piacerebbe davvero ottenere i dati effettivi di richiesta / risposta che viene inviato sul filo.

Sono felice di utilizzare qualsiasi meccanismo di intercettazione come filtri, moduli, ecc. E la soluzione può essere specifica per IIS7. Tuttavia, preferirei tenerlo solo nel codice gestito.

Qualche consiglio?

Modifica: noto che HttpRequest ha un metodo SaveAs che può salvare la richiesta su disco ma ricostruisce la richiesta dallo stato interno usando un carico di metodi di helper interni a cui non è ansible accedere pubblicamente (ragione per cui questo non consente di salvare un utente -il stream fornito non lo so). Quindi sta iniziando a sembrare che dovrò fare del mio meglio per ribuild il testo di richiesta / risposta dagli oggetti … gemere.

Modifica 2: Si noti che ho detto l’ intera richiesta incluso il metodo, il percorso, le intestazioni ecc. Le risposte correnti guardano solo i flussi del corpo che non includono queste informazioni.

Modifica 3: nessuno legge le domande qui intorno? Cinque risposte fino ad ora, eppure nemmeno uno suggerisce un modo per ottenere l’intera richiesta on-the-wire. Sì, so che posso catturare i flussi di output e le intestazioni e l’URL e tutta quella roba dall’object richiesta. L’ho già detto nella domanda, vedi:

Posso ri-costituire ciò in cui credo che la richiesta assomigli ispezionando tutte le proprietà dell’object HttpRequest e costruendo una stringa da loro (e similmente per la risposta) ma mi piacerebbe davvero ottenere i dati effettivi di richiesta / risposta che viene inviato sul filo.

Se si conoscono i dati grezzi completi (inclusi intestazioni, url, metodo http, ecc.) Semplicemente non possono essere recuperati, quindi sarebbe utile sapere. Allo stesso modo se sai come ottenere tutto nel formato raw (sì, intendo ancora includere intestazioni, url, metodo http, ecc.) Senza doverlo ribuild, che è quello che ho chiesto, sarebbe molto utile. Ma dirmi che posso ricostruirlo dagli oggetti HttpRequest / HttpResponse non è utile. Lo so. L’ho già detto.


Nota: prima che qualcuno inizi a dire che questa è una ctriggers idea, o limiterà la scalabilità, ecc., Implementeremo anche meccanismi di throttling, sequential delivery e anti-replay in un ambiente distribuito, quindi è richiesta comunque la registrazione del database. Non sto cercando una discussione sul fatto che questa sia una buona idea, sto cercando come si può fare.