Я пишу веб-службу (используя ASP.NET MVC), и в целях поддержки мы хотели бы иметь возможность регистрировать запросы и ответы в качестве близких насколько это возможно, к необработанному, в-проводном формате (т. е. включая HTTP-метод, путь, все заголовки и тело) в базу данных.Регистрация необработанного HTTP-запроса/ответа в ASP.NET MVC & IIS7
Что я не уверен в том, как получить эти данные в наименее «искаженном» виде. Я могу переформулировать, на мой взгляд, запрос, просматривая все свойства объекта HttpRequest
и строя из них строку (и аналогично для ответа), но я действительно хотел бы получить фактические данные запроса/ответа это отправлено по проводам.
Я рад использовать любой механизм перехвата, такой как фильтры, модули и т. Д., И это решение может быть специфичным для IIS7. Однако я бы предпочел сохранить его только в управляемом коде.
Любые рекомендации?
Edit: Хочу отметить, что HttpRequest
имеет SaveAs
метод, который может сохранить запрос на диске, но это реконструирует запрос от внутреннего состояния с использованием нагрузки внутренних вспомогательных методов, которые не могут быть доступны публично (вполне, почему это Безразлично» t позволяет сохранять поток, предоставленный пользователем, я не знаю). Таким образом, это начинает выглядеть так, как будто я должен сделать все возможное, чтобы восстановить текст запроса/ответа от объектов ... стон.
Edit 2: Пожалуйста, обратите внимание, что я сказал запрос весь включая метод, путь, заголовки и т.д. текущие ответы только смотреть на потоки тела, которые не включают в себя эту информацию.
Редактировать 3: Не читает ли здесь какие-либо вопросы? Пять ответов до сих пор, и все же никто даже не намекает на способ получить весь необработанный запрос на провод. Да, я знаю, что могу захватить выходные потоки, заголовки и URL-адрес, и все это из объекта запроса. Я уже говорил, что в этом вопросе, см:
я могу повторно представлять то, что я считаю, что запрос выглядит, проверяя все свойства HttpRequest объекта и построение строки из них (и аналогично для ответа) но я действительно хотел бы получить фактические данные запроса/ответа, которые были отправлены на проводе.
Если вы знаете полных необработанных данных (включая заголовки, URL, метод HTTP и т.д.) просто не может быть восстановлен, то это было бы полезно знать. Точно так же, если вы знаете, как получить все это в необработанном формате (да, я все еще имею в виду, включая заголовки, url, http-метод и т. Д.) Без необходимости его реконструировать, что я и задал, тогда это было бы очень полезно. Но, рассказывая мне, что я могу восстановить его с объектов HttpRequest
/HttpResponse
, это не полезно. Я знаю это. Я уже это сказал.
Пожалуйста, обратите внимание: Прежде чем кто-нибудь начинает говорить, что это плохая идея, или ограничить масштабируемость и т.д., мы будем также реализации удушения, последовательная доставки и механизмы против повторного воспроизведения в распределенной среде, поэтому в любом случае требуется ведение базы данных. Я не ищу обсуждения, является ли это хорошей идеей, я ищу, как это можно сделать.
@Kev - Нет, это RESTful сервис, реализованный с помощью ASP.NET MVC –
Возможно, это можно сделать с помощью IIS7 и собственного модуля - http://msdn.microsoft.com/ en-us/library/ms694280.aspx –
Вам удалось реализовать это? Просто любопытно, вы применили какую-либо стратегию буфера для записи в db? – systempuntoout