У нас есть служба WCF REST, размещенная на IIS 7 с .NET Framework 4.5. Клиент отправляет данные в GZip сжатом формате с заголовков запроса:Как обрабатывать сжатый запрос в службе WCF
Content-Encoding: GZIP Content-Type: применение/XML
Но мы получаем плохой запрос от сервера, если запрос находится в сжатом формат. Мы включили сжатие запроса путем реализации IHttpModule, который будет фильтровать/изменять входящие запросы. По моему мнению, это происходит неудачно, потому что WCF использует исходную длину контента (сжатых данных) вместо декомпрессированных данных. Итак, вот мои вопросы:
Есть ли способ исправить проблемы с длиной содержимого в IIS7/.NET 4.5? Моя реализация модуля HTTP приведен ниже:
httpApplication.Request.Filter = Новый 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();
}
}
Я сталкиваюсь с тем же. Вы можете добавить фильтр к запросу с помощью модуля, но как только он переходит к WCF, он все равно получает исключение, поскольку теперь запрос имеет другую длину содержимого. – MichaelChan