Клиент веб-сервиса и сжатие

#c# #arrays #web-services #iis-7 #asmx

#c# #массивы #веб-сервисы #iis-7 #asmx

Вопрос:

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

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

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

но как мне включить сжатие на моем клиенте C #.

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

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

Комментарии:

1. Никто ! 🙁 , после того, как я не нашел ответа, я попытался преобразовать свои полные объекты в json, а затем снова json в объект в моем клиенте, но это не имеет никакого существенного значения ,

2. Быстрый поиск наводит меня на мысль, что вам может потребоваться создать пользовательский кодировщик. Там действительно много всего об этом. Даже у Скотта Хансельмана есть статья об этом .

Ответ №1:

Как указал @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.
Я думаю, вам следует проверить оригинальную статью, чтобы получить эту работу