创建自定义编程绑定 [英] Creating Custom Binding programmatically

查看:196
本文介绍了创建自定义编程绑定的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们需要的COM pression在我们的WCF Web服务,并且已经找到了一个很好的解决方案:

We need compression in our WCF Web Service and have already found a good solution:

HTTP://www.$c$cproject。 COM /用品/ 53718 /扩展-WCF-部分-II

这里只有一个问题。配置文件的选项。如何将这些自定义绑定可以在code产生的呢?

There's only one problem. Configuration files are no option. How those Custom Bindings can be created in code?

  <customBinding>
    <binding name="ZipBinding" closeTimeout="00:10:00" 
openTimeout="00:10:00" receiveTimeout="00:10:00" 
    sendTimeout="00:10:00">
      <customMessageEncoding innerMessageEncoding="mtomMessageEncoding" 
    messageEncoderType="YourAssemblyName.YourMessageEncoder, 
    WcfExtensions">
        <readerQuotas maxDepth="999999999" 
            maxStringContentLength="999999999" 
    maxArrayLength="999999999" maxBytesPerRead="999999999" 
    maxNameTableCharCount="999999999">
        </readerQuotas>
      </customMessageEncoding>
      <httpTransport maxBufferSize="999999999" 
        maxReceivedMessageSize="999999999" 
    authenticationScheme="Anonymous" 
    proxyAuthenticationScheme="Anonymous" useDefaultWebProxy="true"/>
    </binding>
  </customBinding>

这是我想出来的:

MessageEncodingBindingElementExtension customMessageEncoding = new MessageEncodingBindingElementExtension
{
    InnerMessageEncoding = "binaryMessageEncoding",
    MessageEncoderType = "WcfExtensions.GZipMessageEncoder, WcfExtensions",
};
customMessageEncoding.ReaderQuotas.MaxDepth = 999999999;
customMessageEncoding.ReaderQuotas.MaxStringContentLength = 999999999;
customMessageEncoding.ReaderQuotas.MaxArrayLength = 999999999;
customMessageEncoding.ReaderQuotas.MaxBytesPerRead = 999999999;
customMessageEncoding.ReaderQuotas.MaxNameTableCharCount = 999999999;

CustomBinding zipBinding = new CustomBinding(customMessageEncoding, new HttpTransportBindingElement
{
    MaxBufferSize = 999999999,
    MaxReceivedMessageSize = 999999999,
    AuthenticationScheme = System.Net.AuthenticationSchemes.Anonymous,
    ProxyAuthenticationScheme = System.Net.AuthenticationSchemes.Anonymous,
    UseDefaultWebProxy = true
});

zipBinding.CloseTimeout = new TimeSpan(0, 10, 0);
zipBinding.OpenTimeout = new TimeSpan(0, 10, 0);
zipBinding.ReceiveTimeout = new TimeSpan(0, 10, 0);
zipBinding.SendTimeout = new TimeSpan(0, 10, 0);

但出于某种原因CustomBinding不接受customMessageEncoding ...

But for some reason CustomBinding doesn't accept customMessageEncoding...

推荐答案

在构造函数类型的第一个参数 CustomBinding 只接受 BindingElement 子类。您指定的类是 BindingElementExtensionElement 的子类(用于自定义配置XML)。

The first parameter in the constructor for the type CustomBinding accepts only a BindingElement subclass. The class you have specified is a BindingElementExtensionElement subclass (used for customising the configuration Xml).

而不是传递的一个子类的 BindingElementExtensionElement CustomBinding 的构造函数,你应该建立一个合适的子类的实例一个 BindingElement (如 BinaryMessageEncodingBindingElement ),并调用 BindingElementExtensionElement 小号 ApplyConfiguration 方法,传入 BindingElement

Instead of passing a subclass of the BindingElementExtensionElement into the CustomBinding constructor, you should create an suitable subclass instance of a BindingElement(e.g. BinaryMessageEncodingBindingElement) and call the BindingElementExtensionElement’s ApplyConfiguration method, passing in the BindingElement.

然后通过实例的 BindingElement CustomBinding 的构造。

Then pass the instance of the BindingElement into the CustomBinding constructor.

BinaryMessageEncodingBindingElement encodingElement = new BinaryMessageEncodingBindingElement();
customMessageEncoding.ApplyConfiguration(encodingElement);

CustomBinding zipBinding = new CustomBinding(encodingElement, new HttpTransportBindingElement
{
    MaxBufferSize = 999999999,
    MaxReceivedMessageSize = 999999999,
    AuthenticationScheme = System.Net.AuthenticationSchemes.Anonymous,
    ProxyAuthenticationScheme = System.Net.AuthenticationSchemes.Anonymous,
    UseDefaultWebProxy = true
});

这篇关于创建自定义编程绑定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆