Сжатие как запросы GZip WCF (SOAP и REST) - PullRequest
1 голос
/ 01 мая 2010

У меня есть веб-приложение .NET 3.5, размещенное в Windows Azure, которое предоставляет несколько конечных точек WCF (как SOAP, так и REST). Конечные точки обычно получают в 100 раз больше данных, чем обслуживают (загружается много данных, загружается гораздо меньше).

Следовательно, я готов воспользоваться преимуществами сжатия HTTP GZip, но не с точки зрения сервера, а с точки зрения клиента, посылая сжатые запросы (возвращение сжатых ответов было бы хорошо, но в любом случае не принесло бы большой выгоды).

Вот небольшой фрагмент кода C #, используемый на стороне клиента для активации WCF:

var binding = new BasicHttpBinding();
var address = new EndpointAddress(endPoint);

_factory = new ChannelFactory<IMyApi>(binding, address);
_channel = _factory.CreateChannel(); 

Есть идеи, как настроить поведение для выполнения сжатых HTTP-запросов?

1 Ответ

2 голосов
/ 01 мая 2010

Если вы хотите использовать коммерческий компонент, попробуйте this . Он обеспечивает стандартное сжатие HTTP для запросов и ответов. Я не уверен, поддерживает ли Azure распаковку сжатых запросов, если нет, то вы также можете использовать ее в Azure для обеспечения распаковки. Вот ваша привязка, измененная по мере необходимости:

using Noemax.WCFX.Channels;

var binding = new BasicHttpBinding();
var address = new EndpointAddress(endPoint);

ContentNegotiationBindingElement contentNegotiation = new ContentNegotiationBindingElement();
contentNegotiation.CompressionMode = SmartCompressionMode.Optimistic;

binding = contentNegotiation.PlugIn(binding);

_factory = new ChannelFactory<IMyApi>(binding, address);
_channel = _factory.CreateChannel(); 
...