J'écris un service Web (en utilisant ASP.NET MVC) et à des fins de support, nous aimerions pouvoir enregistrer les demandes et les réponses au plus près du format brut, sur le fil (c'est-à-dire avec HTTP méthode, chemin, tous les en-têtes et le corps) dans une base de données.
Ce dont je ne suis pas sûr, c'est de savoir comment obtenir ces données de la manière la moins «mutilée». Je peux reconstituer ce à quoi je pense que la demande ressemble en inspectant toutes les propriétés de l' HttpRequest
objet et en construisant une chaîne à partir d'elles (et de même pour la réponse) mais j'aimerais vraiment obtenir les données de demande / réponse réelles qui sont envoyé sur le fil.
Je suis heureux d'utiliser n'importe quel mécanisme d'interception tel que des filtres, des modules, etc. et la solution peut être spécifique à IIS7. Cependant, je préfère le garder en code géré uniquement.
Des recommandations?
Edit: Je note qu'il y HttpRequest
a une SaveAs
méthode qui peut enregistrer la demande sur le disque mais cela reconstruit la demande à partir de l'état interne en utilisant une charge de méthodes d'assistance internes qui ne sont pas accessibles publiquement (c'est pourquoi cela ne permet pas d'enregistrer sur un utilisateur fourni stream je ne sais pas). Il semble donc que je devrais faire de mon mieux pour reconstruire le texte de demande / réponse à partir des objets ... gémissement.
Edit 2: Veuillez noter que j'ai dit toute la demande, y compris la méthode, le chemin, les en-têtes, etc. Les réponses actuelles ne regardent que les flux de corps qui n'incluent pas ces informations.
Edit 3: Personne ne lit les questions ici? Cinq réponses à ce jour et pourtant aucune ne fait même allusion à un moyen d'obtenir toute la demande brute sur le fil. Oui, je sais que je peux capturer les flux de sortie et les en-têtes et l'URL et tout ce qui se passe à partir de l'objet de requête. Je l'ai déjà dit dans la question, voir:
Je peux reconstituer ce à quoi je pense que la demande ressemble en inspectant toutes les propriétés de l'objet HttpRequest et en construisant une chaîne à partir d'elles (et de même pour la réponse) mais j'aimerais vraiment obtenir les données de demande / réponse réelles qui est envoyé sur le fil.
Si vous savez que les données brutes complètes (y compris les en-têtes, l'url, la méthode http, etc.) ne peuvent tout simplement pas être récupérées, il serait utile de le savoir. De même, si vous savez comment tout obtenir au format brut (oui, je veux toujours dire y compris les en-têtes, l'url, la méthode http, etc.) sans avoir à le reconstruire, ce que j'ai demandé, alors ce serait très utile. Mais me dire que je peux le reconstruire à partir des HttpRequest
/ HttpResponse
objets n'est pas utile. Je le sais. Je l'ai déjà dit.
Remarque: avant que quiconque ne commence à dire que c'est une mauvaise idée, ou limitera l'évolutivité, etc., nous mettrons également en œuvre des mécanismes de limitation, de livraison séquentielle et d'anti-relecture dans un environnement distribué, de sorte que la journalisation de la base de données est de toute façon nécessaire. Je ne cherche pas à savoir si c'est une bonne idée, je cherche comment cela peut être fait.