ASP.NET WebService сжатие ответов - PullRequest
1 голос
/ 13 января 2011

Как мне сжать выходные данные из веб-сервиса (веб-метод).Выходные данные имеют тип XmlDocument.

Вот код.

[WebMethod]
public XmlDocument GetPersonalInfo(int CustomerID)
{
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(new CustomersXML().GetPersonalInfo(CustomerID));
    return doc;
}

Как мне сжать этот ответ.Помните, что это не страница (вызов HTTP), а веб-служба, которая вызывается из клиента Flex.

Спасибо

Ответы [ 4 ]

1 голос
/ 03 ноября 2011

зайдите в свой iis или любой другой файл конфигурации и добавьте следующую строку в соответствующем месте:

<add mimeType="application/json" enabled="true" />

У меня возникла та же проблема - мой IIS смог GZIP ответить на любой http-ответ, кромедля ответов json (которые в моем приложении больше всего требовали сжатия gzip).

надеюсь, что это поможет

Обновление: файл конфигурации хоста приложения должен находиться здесь: % windir%\ System32 \ Inetsrv \ Config

1 голос
/ 11 августа 2011

Этот ответ ссылается на древнюю статью , объясняющую, как реализовать это программным путем, используя SharpZipLib .

Другой ответ демонстрирует использование System.IO.Compression классов , которые могут быть заменены SharpZipLib.

Рик Страл (Rick Strahl) составил статью , в которой рассматриваются потенциальные проблемы, о которых следует помнить при реализации сжатия, которые, как представляется, не рассматриваются в приведенных выше примерах. Он также ссылается на статью , в которой более подробно описывается использование встроенного сжатия IIS7.

0 голосов
/ 13 января 2011

Это не имеет ничего общего с .NET.

GZIP - это функция HTTP на веб-сервере - при условии, что клиент поддерживает ее, обычно уведомляя сервер, отправляя GZIP в заголовках ACCEPT при отправке запроса.

Вам необходимо настроить его в IIS. В зависимости от версии, он может быть разным. В IIS 7 это очень просто, просто установить флаг. Смотри здесь .

0 голосов
/ 13 января 2011

У меня нет времени искать код, но есть пространство имен System.IO.Compression, в котором есть несколько классов для схем сжатия на основе Gzip и Deflation.Gzip, вероятно, является более безопасной ставкой для межязыкового общения, так как я не уверен в том, насколько широко распространено дефляционное сжатие.

Однако у вас не должно быть никаких проблем в общении, пока есть заголовокс пакетом SOAP, указывающим клиентскому серверу распаковать поток.

Примечание. Перед этим дважды проверьте настройки сервера, поскольку на некоторых хостах Gzip включен по умолчанию, и вы не хотите делать это дважды..

...