Как сжимать трафик WCF, размещенный на ServiceBus, используя привязку NetTcpRelay

Мы хотим использовать сжатие GZip в нашем сервисе WCF 4.5. Мы размещаем сервис на ServiceBus и используем NetTcpRelayBinding.

WCF 4.5 должен поддерживать сжатие GZip OOB. Я расширил стандарт NetTcpRelayBinding и включил сжатие GZip

    public class CompressedNetTcpRelayBinding : NetTcpRelayBinding 
    {
        public override BindingElementCollection CreateBindingElements()
        {
            var elements = base.CreateBindingElements();
            var encodingBinding = elements.Single(e => e is BinaryMessageEncodingBindingElement);
            ((BinaryMessageEncodingBindingElement)encodingBinding).CompressionFormat = CompressionFormat.GZip;

            var bindingElementCollection = new BindingElementCollection();
            foreach (var bindingElement in elements)
            {
                bindingElementCollection.Add(bindingElement);
            }

            return bindingElementCollection.Clone();
        }
    }

Однако, когда я пытаюсь разместить службу, я получаю следующее исключение:

Транспорт, настроенный для этой привязки, не поддерживает указанный формат сжатия (GZip) в кодировщике сообщений. Чтобы решить эту проблему, установите CompressionFormat в BinaryMessageEncodingBindingElement на "Нет" или используйте другой транспорт.

NetTcpRelayBinding использует Microsoft.ServiceBus.TcpRelayTransportBindingElement по умолчанию.

Что я должен сделать, чтобы сделать эту работу?

1 ответ

Попробуй это:

<customBinding>
  <binding name="BinaryCompressionBinding"> 
    <binaryMessageEncoding compressionFormat="GZip"/> 
    <httpTransport /> 
  </binding>
</customBinding>

Как заставить работать сжатие gzip в WCF 4.5

Другие вопросы по тегам