2013-10-07 3 views
3

У нас есть служба WCF REST, размещенная на IIS 7 с .NET Framework 4.5. Клиент отправляет данные в сжатом формате GZip с заголовков запроса:Как обрабатывать сжатый запрос в службе WCF REST

Content-Encoding:gzip 
Content-Type: application/xml 

Но мы получаем плохой запрос от сервера, если запрос находится в сжатом формате. Мы включили сжатие запроса путем реализации IHttpModule, который будет фильтровать/изменять входящие запросы. По моему мнению, это происходит неудачно, потому что WCF использует исходную длину контента (сжатых данных) вместо декомпрессированных данных. Итак, вот мои вопросы:

Есть ли способ исправить проблемы с длиной содержимого в IIS7/.NET 4.5? Моя реализация модуля HTTP приведен ниже:

httpApplication.Request.Filter = New GZipStream(httpApplication.Request.Filter, CompressionMode.Decompress)` 

Если фиксируя вопрос длины содержание не представляется возможным на стороне сервера, есть ли способ, я могу отправить оригинальную длину содержимого от клиента с помощью сжатого запроса? Реализация на стороне клиента выглядит следующим образом:

using (Stream requeststream = serviceRequest.GetRequestStream()) 
{ 
    if (useCompression) 
    { 
     using (GZipStream zipStream = new GZipStream(requeststream, CompressionMode.Compress)) 
     { 
      zipStream.Write(bytes, 0, bytes.Length); 
      zipStream.Close(); 
      requeststream.Close(); 
     } 

     serviceRequest.Headers.Add("Content-Encoding", "gzip"); 
    } 
    else 
    { 
     requeststream.Write(bytes, 0, bytes.Length); 
     requeststream.Close(); 
    } 
} 
+0

У меня такая же проблема с нашим сервером давая «400 плохой запрос», когда я отправьте сжатый запрос. Вы когда-нибудь находили решение для этого? – ParvusM

ответ