创建自定义编程绑定 [英] Creating Custom Binding programmatically
问题描述
我们需要的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屋!