2010-12-10 12 views
8

W przypadku aplikacji sieci Web ASP.NET 4.0/IIS7, chciałbym obsługiwać skompresowane żądania HTTP , które wymagają. Zasadniczo chciałbym wspierać klientów, którzy dodaliby Content-Encoding: gzip w nagłówkach żądań i odpowiednio skompresowali ciało.Jak obsługiwać skompresowane żądania HTTP w Asp.Net 4.0/IIS7?

Czy ktoś wie, jak mogę osiągnąć takie zachowanie?

Ps: dotyczących, mam wiele punktów końcowych REST i SOAP, i czuję się lepszym rozwiązaniem do obsługi kompresji na poziomie HTTP niż niestandardowe kodery dla każdego punktu końcowego.

Odpowiedz

5

Dla tych, którzy mogą być zainteresowani, implementacja jest dość prosta dzięki IHttpModule, która po prostu filtruje przychodzące żądania.

public class GZipDecompressModule : IHttpModule 
{ 
    public void Init(HttpApplication context) 
    { 
     context.BeginRequest += BeginRequest; 
    } 

    void BeginRequest(object sender, EventArgs e) 
    { 
     var app = (HttpApplication)sender; 

     if ("gzip" == app.Request.Headers["Content-Encoding"]) 
     { 
      app.Request.Filter = new GZipStream(
       app.Request.Filter, CompressionMode.Decompress); 
     } 
    } 

    public void Dispose() 
    { 
    } 
} 

Aktualizacja: Wydaje się, że podejście to wywołać problemy w WCF, ponieważ opiera się na oryginalnym WCF Content-Length a nie wartość otrzymanego po dekompresji.

+0

Miałem wrażenie, że można skonfigurować kompresję na poziomie IIS raczej w ramach hostowanej aplikacji. Jednak niewiele o tym wiem, tylko sugestia google "Kompresja IIS" – e36M3

+2

Klasyczna kompresja HTTP dotyczy tylko ** odpowiedzi **, tutaj są ** żądania ** Próbuję kompresować. –

+0

Coś nowego tutaj? – ver

Powiązane problemy