WCF错误:无消息版本不支持Soap标头

时间:2015-06-15 15:57:38

标签: c# web-services wcf soap

我正在尝试在WCF中为文件传输添加流式传输。 我的WCF服务有2个端点 - BasicHttpBinding和WebHttpBinding。

我收到错误 - 正在执行文件传输的方法上的无消息版本不支持Soap Headers。 只要我在web.config中注释我的WebHttpBinding端点并且只有我的BasicHttpBinding,错误就会消失。

我搜索过很多关于此的帖子,但无法找到原因和解决此问题的方法。

如果我评论上传方法,它可以正常运行且没有错误。

这是我的配置

<endpoint address="basic" 
          binding="basicHttpBinding" 
          bindingConfiguration="myBasicBinding" 
          contract="IService" /> 
<endpoint address="web" 
          binding="webHttpBinding" 
          behaviorConfiguration="webBehavior"
          bindingConfiguration="webbinding" 
          contract="IService" /> 
<endpoint address="mex" 
          binding="mexHttpBinding" 
          contract="IMetadataExchange" />
<binding name="myBasicBinding" 
         maxBufferSize="2147483647" 
         maxReceivedMessageSize="2147483647" 
         closeTimeout="01:50:00" 
         openTimeout="01:50:00" 
         sendTimeout="01:50:00" 
         receiveTimeout="01:50:00" 
         transferMode="Streamed" 
         messageEncoding="Mtom" >
<binding name="webbinding" transferMode="StreamedRequest">

这是服务

 <service name="EmployeeAPI.Service" behaviorConfiguration="MyServiceTypeBehaviors">    

方法:

    [OperationBehavior]
    public void UploadFile_WorksFineForlocalDrive(FileUploadMessage request)
    { ... }

[MessageContract]
    public class FileUploadMessage
    {
        [MessageHeader(MustUnderstand = true)]
        public FileMetaData Metadata;
        [MessageBodyMember(Order = 1)]
        public Stream FileByteStream;
    }

1 个答案:

答案 0 :(得分:0)

据我所知,webHttpBinding使用MessageVersion.None,None是不使用SOAP或WS-Addressing的消息版本,MessageVersion.None支持使用&#34;普通旧XML&#34; (POX)式的消息传递。 在这种风格中,您不需要处理SOAP Envelope和SOAP标头。 并且,因为您在消息合同中使用了MessageHeader,如果您不在web.config中对WebHttpBinding端点发表评论,您将收到错误消息..