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