Piszę usługę sieciową (używając ASP.NET MVC) i dla celów wsparcia chcielibyśmy móc rejestrować żądania i odpowiedzi w jak najbardziej zbliżonym do surowego formacie on-the-wire (tj. W tym HTTP metoda, ścieżka, wszystkie nagłówki i treść) do bazy danych.
Nie jestem pewien, jak zdobyć te dane w najmniej „zniekształcony” sposób. Mogę ponownie określić, jak moim zdaniem wygląda żądanie, sprawdzając wszystkie właściwości HttpRequest
obiektu i budując z nich ciąg (i podobnie w przypadku odpowiedzi), ale naprawdę chciałbym uzyskać rzeczywiste dane żądania / odpowiedzi, które wysłane za pośrednictwem drutu.
Z przyjemnością używam dowolnego mechanizmu przechwytywania, takiego jak filtry, moduły itp., A rozwiązanie może być specyficzne dla IIS7. Jednak wolałbym zachować go tylko w kodzie zarządzanym.
Jakieś zalecenia?
Edycja: Zauważyłem, że HttpRequest
ma SaveAs
metodę, która może zapisać żądanie na dysku, ale to rekonstruuje żądanie ze stanu wewnętrznego przy użyciu obciążenia wewnętrznych metod pomocniczych, do których nie można uzyskać dostępu publicznie (dlaczego nie pozwala to na zapisanie do podanego przez użytkownika strumień nie wiem). Zaczyna więc wyglądać, że będę musiał zrobić co w mojej mocy, aby zrekonstruować tekst żądania / odpowiedzi z obiektów ... jęk.
Edycja 2: Proszę zauważyć, że powiedziałem, że całe żądanie, w tym metoda, ścieżka, nagłówki itp. Bieżące odpowiedzi dotyczą tylko strumieni treści, które nie zawierają tych informacji.
Edycja 3: Czy nikt tutaj nie czyta pytań? Jak dotąd pięć odpowiedzi, a jednak żadna z nich nie wskazuje nawet sposobu na uzyskanie całego surowego żądania w sieci. Tak, wiem, że mogę przechwytywać strumienie wyjściowe, nagłówki, adres URL i wszystko inne z obiektu żądania. Powiedziałem już, że w pytaniu zobacz:
Mogę odtworzyć to, jak moim zdaniem wygląda żądanie, sprawdzając wszystkie właściwości obiektu HttpRequest i budując z nich ciąg (i podobnie w przypadku odpowiedzi), ale naprawdę chciałbym uzyskać rzeczywiste dane żądania / odpowiedzi to jest wysłane przez kabel.
Jeśli znasz kompletne nieprzetworzone dane (w tym nagłówki, adres URL, metodę http itp.), Po prostu nie możesz ich pobrać, wtedy warto to wiedzieć. Podobnie, jeśli wiesz, jak uzyskać to wszystko w formacie surowym (tak, nadal mam na myśli włączenie nagłówków, adresu URL, metody http itp.) Bez konieczności rekonstrukcji, o co prosiłem, wtedy byłoby to bardzo przydatne. Ale mówienie mi, że mogę to zrekonstruować z HttpRequest
/ HttpResponse
obiektów, nie jest przydatne. Wiem to. Już to powiedziałem.
Uwaga: zanim ktokolwiek zacznie mówić, że to zły pomysł lub ograniczy skalowalność itp., Zaimplementujemy również mechanizmy ograniczania przepustowości, dostarczania sekwencyjnego i zapobiegania powtórzeniom w środowisku rozproszonym, więc i tak rejestrowanie bazy danych jest wymagane. Nie szukam dyskusji, czy to dobry pomysł, szukam, jak można to zrobić.