2012-03-02 2 views
1

우리는 우리의 WCF 웹 서비스에서 압축을 필요로하고 이미 좋은 해결책을 발견 만들기 :사용자 정의 바인딩 프로그램

http://www.codeproject.com/Articles/53718/Extending-WCF-Part-II

하나의 문제가있다. 구성 파일은 옵션이 아닙니다. 코드에서 이러한 사용자 지정 바인딩을 만드는 방법은 무엇입니까? 내가 가지고 올 한 내용

<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 허용하지 않는 몇 가지 이유 ... for

답변

3

유형에 대한 생성자의 첫 번째 매개 변수 CustomBindingBindingElement 하위 클래스 만 허용합니다. 지정한 클래스는 BindingElementExtensionElement 하위 클래스입니다 (구성 XML을 사용자 지정하는 데 사용됩니다).

대신 CustomBinding 생성자로 BindingElementExtensionElement의 서브 클래스를 전달하는 경우에는 BindingElement (예컨대 BinaryMessageEncodingBindingElement)의 적절한 서브 클래스의 인스턴스를 생성해야하며 BindingElement 전달하여 BindingElementExtensionElement의에게 ApplyConfiguration 메소드를 호출한다.

그런 다음 BindingElement의 인스턴스를 CustomBinding 생성자로 전달합니다.

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 
}); 
+0

고마워요! 이 작동합니다. – Juha

관련 문제