Как создать пользовательскую привязку, обеспечив безопасность WSHttpBinding и сжатие GZip? - PullRequest
5 голосов
/ 08 октября 2009

Я столкнулся с проблемой здесь. Я делаю проект клиент / сервер, который представляет собой веб-сервис WCF, вызывающий для получения данных. Из-за огромных данных о передаче мне пришлось программно изменять привязку к настраиваемой привязке (не через файл конфигурации).

Я создаю новую пользовательскую привязку, также называемую пользовательскую привязку. Пример класса:

public class MyCustomBinding : CustomBinding    

и переопределить функцию BindingElementCollection:

public override BindingElementCollection CreateBindingElements()
{
   WSHttpBinding wSHttpBinding = new WSHttpBinding("RMSKeberosBinding"); //this is to load the configuration from app.config. because i want to copy the setting of wsHttpConfig to my custom binding.

   BindingElementCollection wSHttpBindingElementCollection = wSHttpBinding.CreateBindingElements();

   TransactionFlowBindingElement transactionFlowBindingElement = wSHttpBindingElementCollection.Remove<TransactionFlowBindingElement>();
   SymmetricSecurityBindingElement securityElement = wSHttpBindingElementCollection.Remove<SymmetricSecurityBindingElement>();
   MessageEncodingBindingElement textElement = wSHttpBindingElementCollection.Remove<MessageEncodingBindingElement>();
   HttpTransportBindingElement transportElement = wSHttpBindingElementCollection.Remove<HttpTransportBindingElement>();

   GZipMessageEncodingBindingElement gzipElement = new GZipMessageEncodingBindingElement(); // this is from microsoft sample. i want to add gzip as a compress to my message.

   BindingElementCollection newCol = new BindingElementCollection();
   newCol.Add(transactionFlowBindingElement);
   newCol.Add(securityElement);
   newCol.Add(gzipElement);
   newCo .Add(transElement);
   return newCol;
}

я пытаюсь скопировать все настройки из wshttpbinding и добавить gzip в качестве кодировщика сообщений. Сжатие зашифрованных данных приведет к увеличению исходного размера данных. это потому, что SymmetricSecurityBindingElement из WSHttpBinding сделал шифрование. Как сделать это правильно? я хочу, чтобы настройки безопасности из wshttpbinding, а также gzip работали.

1 Ответ

0 голосов
/ 08 октября 2009

Вы должны иметь возможность просто использовать поведение для применения сжатия соответственно:

http://weblogs.asp.net/cibrax/archive/2006/03/29/441398.aspx

РЕДАКТИРОВАТЬ: Я, возможно, также должен включить ссылку на сжатие на основе поведения:

http://weblogs.shockbyte.com.ar/rodolfof/archive/2006/04/06/5632.aspx

...