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