Как сжимать трафик 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>