2011-02-01 2 views
1

Я использую ссылку на веб-службу в своем приложении .net 3.0, и я пытаюсь настроить gzip-декодирование.httpWebRequest.AutomaticDecompression не устанавливает заголовок «Accept_Encoding: gzip»

Когда я использую SoapUI, ответы сжимаются с помощью gzip, потому что в запросе задан заголовок «Accept-Encoding: gzip, deflate». Когда мой запрос .net отправляется, у него нет этого заголовка, поэтому сервер не сжимает ответ.

Я нашел это link, который описывает, что именно я хочу делать. Я выполнил код и проверил с помощью отладчика, что он выполняется по каждому запросу, но он все еще не добавляет заголовок «Accept-Encoding: gzip».

Далее Я добавил заголовок вручную в класс по ссылке.

httpWebRequest.Headers.Add("Accept-Encoding", "gzip"); 

Наконец, я получил сжатый ответ с сервера! Но нет, теперь я получаю искаженное xml-исключение, которое, я уверен, связано с тем, что ответ не распадается, даже если для этого класса задан класс из ссылки.

httpWebRequest.AutomaticDecompression = DecompressionMethods.GZip;; 

Я не могу понять, что происходит не так.

+1

'.AutomaticDecompression = DecompressionMethods.GZip;' добавляет заголовок '' Accept-Encoding '', который сам может вмешаться в AutomaticDecompression. Вы должны использовать '(HttpWebRequest) WebRequest.Create()' также, istead этого уродливого отражения, используемого на странице, на которую вы ссылаетесь. – nos

+0

Поскольку я использую веб-ссылку, я просто вызываю методы в ссылочной api и явным образом не создаю веб-запросы. Эти творения каким-то образом обрабатываются .net, и именно поэтому я использовал этот код отражения. Если я не добавляю заголовок для «Accept-Encoding», запрос не имеет этого заголовка, даже когда я устанавливаю .AutomaticDecompression = DecompressionMethods.GZip; Я вижу эту проблему, потому что я использую веб-ссылку? – Tbonebrad

ответ

2

Хорошо, я выяснил решение моей проблемы.

Поскольку я использую ссылку в Интернете, вам необходимо установить EnableDecompression = true на веб-объект ссылки.

Таким образом, решение что-то вроде этого

var client = new ReferredService 
       { 
        EnableDecompression = true 
       } 

где ReferredService является веб имя ссылки.

Смежные вопросы