Я пишу веб-службу (используя ASP.NET MVC), и в целях поддержки мы хотели бы иметь возможность регистрировать запросы и ответы как можно ближе к необработанному, беспроводному формату (т.е. включая HTTP метод, путь, все заголовки и тело) в базу данных.
Я не уверен в том, как получить эти данные наименее "искаженным" способом. Я могу заново составить то, что, по моему мнению, выглядит как запрос, проверив все свойства HttpRequest
объекта и построив из них строку (и аналогично для ответа), но я действительно хотел бы получить фактические данные запроса / ответа, которые отправлено по телеграфу.
Я счастлив использовать любой механизм перехвата, такой как фильтры, модули и т. Д., И решение может быть специфичным для IIS7. Однако я бы предпочел оставить его только в управляемом коде.
Какие-нибудь рекомендации?
Изменить: я отмечаю, что у HttpRequest
него есть SaveAs
метод, который может сохранить запрос на диск, но он восстанавливает запрос из внутреннего состояния, используя загрузку внутренних вспомогательных методов, к которым нельзя получить доступ публично (вот почему это не позволяет сохранить в предоставленный пользователем поток не знаю). Так что это начинает выглядеть так, как будто мне придется сделать все возможное, чтобы восстановить текст запроса / ответа из объектов ... стон.
Изменить 2: Обратите внимание, что я сказал весь запрос, включая метод, путь, заголовки и т. Д. Текущие ответы смотрят только на потоки тела, которые не включают эту информацию.
Изменить 3: здесь никто не читает вопросы? На данный момент пять ответов, но ни один из них даже не намекает на способ получить весь необработанный запрос по сети. Да, я знаю, что могу захватывать выходные потоки, заголовки, URL-адрес и все такое из объекта запроса. Я уже сказал, что в вопросе см .:
Я могу заново составить то, что, по моему мнению, выглядит как запрос, проверив все свойства объекта HttpRequest и построив из них строку (и аналогично для ответа), но я бы очень хотел получить фактические данные запроса / ответа. это отправлено по телеграфу.
Если вы знаете, что полные необработанные данные (включая заголовки, URL-адрес, метод http и т. Д.) Просто не могут быть получены, это было бы полезно знать. Точно так же, если вы знаете, как получить все это в необработанном формате (да, я все еще имею в виду заголовки, URL-адрес, метод http и т.д.) без необходимости его восстанавливать, о чем я просил, тогда это было бы очень полезно. Но рассказывать мне, что я могу восстановить его из HttpRequest
/ HttpResponse
объектов, бесполезно. Я знаю это. Я уже сказал это.
Обратите внимание: прежде чем кто-либо начнет говорить, что это плохая идея или ограничит масштабируемость и т. Д., Мы также будем внедрять механизмы регулирования, последовательной доставки и предотвращения повторного воспроизведения в распределенной среде, поэтому в любом случае потребуется ведение журнала базы данных. Я не ищу обсуждения того, хорошая ли это идея, я ищу, как это можно сделать.