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