To jest nasz scenariusz (co nie jest do negocjacji):Transparent GZIP dekompresja danych post przez WCF Rest Służby
- WCF REST Usługi wystawiony przez HTTP za pomocą WebHttpEndpoint gospodarzem w IIS7
- Wszystkie odpowiedzi i POST żądania danych przesyłane jako JSON
- Klient WWW spoza WCF
- Włączyliśmy kompresję gzip dla odpowiedzi JSON w IIS7, który działa dobrze.
Ponieważ robimy żądania POST z większych ładunków JSON mamy wdrożone kompresji GZIP po stronie klienta dla danych JSON pocztowych i ustawienie „Content-Encoding” nagłówek „gzip”. Niestety IIS nie radzi sobie z tym po wyjęciu z pudełka. Dane post docierają do deserializatora WCF w skompresowanej formie, co oczywiście powoduje wyjątek.
Próbowałem różnych punktów rozszerzenia, aby podłączyć do potoku WCF, ale jedyne obiecujące rozwiązanie (Operation Behavior) nie działało, ponieważ w przypadku braku klienta WCF, metoda ApplyClientBehavior interfejsu IOperationBehavior nigdy nie zostanie wywołana.
W końcu jeśli wdrożony HttpModule, który dostaje zadanie, ale nie jestem dokładnie zadowolony z wyniku, ponieważ z następujących zastrzeżeń:
- choć jestem w stanie przejrzyście dekompresji danych żądania przez ustawienie właściwość Filter bieżącego HttpRequest do GZipInputStream, który jest tylko połową rozwiązania, ponieważ WCF nalega na dokładne odczytanie bajtów HttpRequest.ContentLength z żądania, które w przypadku skompresowanych żądań będzie oczywiście znacznie mniejsze niż nieskompresowany ładunek
- Z jakiegoś dziwnego powodu poza moja wyobraźnia Microsoft zablokował każdy legalny sposób na zmianę długości treści r equest. W końcu musiałem zmodyfikować prywatne pole zaplecza dla właściwości ContentLength żądania. Które nie jest czymś, co chcesz zrobić w kodzie produkcyjnym.
- Microsoft udostępnił także niemożliwym do zapoznania się z InputStream życzenie w HttpModule, aby dowiedzieć się nieskompresowany długość treści, które wymagane klientowi internetowej, aby również przekazać niestandardowy nagłówek zawierający nieobciążonej długości zawartości
W sumie Odczuwalna strasznie dużo pracy, której nie można było nawet wdrożyć w sposób czysty, więc chciałbym wiedzieć, czy ktoś może wskazać alternatywy dla implementacji części dekompresyjnej w IIS. Mam absolutną rację z zaleceniami dotyczącymi komercyjnego produktu, który to robi, jeśli taki istnieje.
Czy znaleźć rozwiązanie dla tego? – Snowy
Czy ktoś znalazł rozwiązanie tego problemu? –
Nie wydaje się, aby znane rozwiązanie. –