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