Ich schreibe einen Webdienst (mit ASP.NET MVC) und zu Supportzwecken möchten wir die Anforderungen und Antworten so nah wie möglich am unformatierten On-the-Wire-Format (dh einschließlich HTTP) protokollieren können Methode, Pfad, alle Header und der Body) in eine Datenbank.
Ich bin mir nicht sicher, wie ich diese Daten auf die am wenigsten "verstümmelte" Weise erreichen kann. Ich kann wieder herstellen, wie die Anfrage meiner Meinung nach aussieht, indem ich alle Eigenschaften des HttpRequest
Objekts überprüfe und daraus eine Zeichenfolge erstelle (und ähnlich für die Antwort), aber ich möchte wirklich die tatsächlichen Anforderungs- / Antwortdaten erhalten, die es sind auf den Draht geschickt.
Ich verwende gerne Abfangmechanismen wie Filter, Module usw., und die Lösung kann spezifisch für IIS7 sein. Ich würde es jedoch vorziehen, es nur in verwaltetem Code zu belassen.
Irgendwelche Empfehlungen?
Bearbeiten: Ich stelle fest, dass HttpRequest
es eine SaveAs
Methode gibt, mit der die Anforderung auf der Festplatte gespeichert werden kann, die jedoch die Anforderung aus dem internen Status mithilfe einer Reihe interner Hilfsmethoden rekonstruiert, auf die nicht öffentlich zugegriffen werden kann (weshalb dies das Speichern auf einem vom Benutzer bereitgestellten Gerät nicht zulässt Stream weiß ich nicht). Es sieht also so aus, als müsste ich mein Bestes geben, um den Anforderungs- / Antworttext aus den Objekten zu rekonstruieren ... Stöhnen.
Bearbeiten 2: Bitte beachten Sie, dass ich die gesamte Anfrage einschließlich Methode, Pfad, Header usw. gesagt habe . Die aktuellen Antworten beziehen sich nur auf die Body-Streams, die diese Informationen nicht enthalten.
Edit 3: Liest hier niemand Fragen? Bisher fünf Antworten, von denen noch keine einen Hinweis darauf gibt, wie die gesamte rohe On-the-Wire-Anfrage beantwortet werden kann. Ja, ich weiß, dass ich die Ausgabestreams und die Header sowie die URL und all das Zeug vom Anforderungsobjekt erfassen kann. Ich habe das bereits in der Frage gesagt, siehe:
Ich kann wieder herstellen, wie die Anfrage meiner Meinung nach aussieht, indem ich alle Eigenschaften des HttpRequest-Objekts überprüfe und daraus eine Zeichenfolge (und ähnlich für die Antwort) erstelle, aber ich möchte wirklich die tatsächlichen Anforderungs- / Antwortdaten abrufen das ist auf dem Draht gesendet.
Wenn Sie wissen, dass die vollständigen Rohdaten (einschließlich Header, URL, http-Methode usw.) einfach nicht abgerufen werden können, ist dies hilfreich. Wenn Sie wissen, wie Sie alles im Rohformat erhalten (ja, ich meine immer noch Header, URL, http-Methode usw.), ohne es rekonstruieren zu müssen, was ich gefragt habe, dann wäre das sehr nützlich. Es ist jedoch nicht sinnvoll , mir zu sagen, dass ich es aus den HttpRequest
/ HttpResponse
-Objekten rekonstruieren kann. Ich weiß das. Ich habe es schon gesagt.
Bitte beachten Sie: Bevor jemand anfängt zu sagen, dass dies eine schlechte Idee ist oder die Skalierbarkeit usw. einschränkt, werden wir auch Drosselungs-, sequentielle Übermittlungs- und Anti-Replay-Mechanismen in einer verteilten Umgebung implementieren, sodass ohnehin eine Datenbankprotokollierung erforderlich ist. Ich suche keine Diskussion darüber, ob dies eine gute Idee ist, ich suche nach Möglichkeiten, wie dies getan werden kann.