在 WCF 客户端的代码中设置消息版本

Posted

技术标签:

【中文标题】在 WCF 客户端的代码中设置消息版本【英文标题】:Setting Message version in code for WCF client 【发布时间】:2011-05-09 06:00:10 【问题描述】:

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

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;

【问题讨论】:

谢谢,这是我一直在寻找的答案! 【参考方案1】:

为了实现这一点,您需要定义自定义绑定 - 在配置或代码中。

在配置中,你会这样做:

<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>

【讨论】:

@amz:您应该使用此解决方案更新您的原始问题;在那里你可以正确格式化并呈现它 - 在 cmets 中,这是一件凌乱的事情......

以上是关于在 WCF 客户端的代码中设置消息版本的主要内容,如果未能解决你的问题,请参考以下文章

在 wcf 服务中设置 cookie

如何在WPF应用程序中的SOAP客户端的“Set-Cookie”标头响应的新请求中设置“Cookie”标头

WCF 显示超时错误

在 WCF 服务中设置绑定

在 App.config 中设置 WCF ClientCredentials

客户端的 WCF Web 服务自定义异常错误