Клиент веб-сервиса и сжатие - PullRequest
2 голосов
/ 14 октября 2011

Мне удалось настроить II7 с помощью сжатия Gzip.

Я могу проверить через веб-сниффер, что моя кодировка веб-службы asmx - это Gzip, но как включить сжатие gzip на моем клиенте C #, я использую ИнтернетСлужба является справочной службой в моем приложении.

На самом деле я пытаюсь отправить большой объем данных, 10k объектов массива, поэтому сжатие будет иметь большое влияние на bw.

, но как это сделать?Я включаю Сжатие на моем клиенте C #.

Я пытаюсь увидеть, что многие люди видят ту же проблему, но нет четкого ответа, некоторые говорят, что используют сторонние инструменты или некоторые говорят о пользовательских заголовках и т. Д. И т. Д.

Не существует какого-либо правильного способа, встроенного для использования сжатого веб-сервиса

1 Ответ

1 голос
/ 31 октября 2012

Как отметил @Igby Largeman, вы можете использовать IIS7 для включения сжатия на сервере, но этого недостаточно.
Основная идея состоит в том, чтобы установить заголовки на стороне клиента и на стороне сервера:

Клиент

Accept-Encoding = "gzip, deflate";

Вы можете достичь этого с помощью кода:

var request = HttpWebRequest.Create("http://foofoo");
request.Headers["Accept"] = "application/json";
request.Headers["Accept-Encoding"] = "gzip, deflate";

или

var request = HttpWebRequest.Create("http://foofoo");
request.AutomaticDecompression = DecompressionMethods.GZip |  
  DecompressionMethods.Deflate;

Если вы используете какой-либо клиент WCF, а не HttpWebRequest, вам следует использовать специальный инспектор и диспетчер, как в этой статье :

Поэтому я использовал инспектор сообщений, реализующий IClientMessageInspector и IDispatchMessageInspector для автоматической установки заголовков AcceptEncoding и ContentEncoding http.

Это работало отлично, но я не смог добиться распаковки ответа на сервере, сначала обнаружив заголовок ContentEncoding, таким образом, я использовал обходной путь, чтобы сначала попытаться распаковать его, а если это не удалось, просто попытаться обработать запрос как нормальный.

Я также сделал это в клиентском конвейере, и это тоже работает.

Сервер

// This is the nearly same thing after all
Content-Encoding = "gzip" OR Content-Encoding = "deflate"

Чтобы сделать это на стороне сервера, вы должны включить httpCompression в IIS.
Я думаю, что вы должны проверить оригинальную статью , чтобы получить эту работу

...