2010-11-12 52 views
7

我想为WSHttpBinding设置消息版本为EnvelopeVersion.Soap11。我不知道该怎么做。谁能帮我。这里是我的绑定代码设置WCF客户端代码中的消息版本

var binding = new WSHttpBinding() 
     { 
      UseDefaultWebProxy = true, 
      Security = 
      { 
       Mode = SecurityMode.Transport, 
       Transport = 
       { 
        ClientCredentialType = HttpClientCredentialType.Basic 
       }, 
      }, 
     }; 

编辑: 这里是代码做

TransportBindingElement transportElement = null; 

     transportElement = new HttpsTransportBindingElement(); 

     ((HttpsTransportBindingElement)transportElement).AuthenticationScheme = AuthenticationSchemes.Basic; 
     ((HttpsTransportBindingElement) transportElement).KeepAliveEnabled = false; 

     var messegeElement = new TextMessageEncodingBindingElement 
     { 
      MessageVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap11, AddressingVersion.None), 
      ReaderQuotas = 
        { 
         MaxArrayLength = 200000, 
         MaxBytesPerRead = 200000, 
         MaxDepth = 200000, 
         MaxNameTableCharCount = 200000, 
         MaxStringContentLength = 200000 
        } 
     }; 

     var binding = new CustomBinding(messegeElement, transportElement); 
     return binding; 

回答

6

为了实现这一点,你需要定义一个自定义的结合 - 在配置或代码。

在配置,你会做这样的事情:

<system.serviceModel> 
    <bindings> 
     <customBinding> 
     <binding name="Soap11"> 
      <textMessageEncoding messageVersion="Soap11" /> 
      <httpTransport /> 
     </binding> 
     </customBinding> 
    </bindings> 

,然后在您的服务或客户端配置,使用这样的:

<services> 
     <service name="test"> 
     <endpoint name="TestEP" 
      address="" 
      binding="customBinding" 
      bindingConfiguration="Soap11" 
      contract="IService" /> 
     </service> 
    </services> 
</system.serviceModel> 
+2

如何通过C#实现这一目标码? – Amzath 2010-11-12 20:45:38

+0

@amz:您应该使用此解决方案**更新**您的原始问题;在那里你可以正确地格式化和呈现它 - 在评论中,这是一个混乱的事情...... – 2010-11-12 22:16:08

+1

已添加源代码到答案 – Amzath 2010-11-24 22:39:32

相关问题