我试图使用WCF与信息流的合同,因为我需要流本身旁边附加参数。
基本上我创建一个文件上传和下载服务,顶部一些额外的逻辑。
不幸的是,当我尝试打从浏览器服务检查一切正常,我得到以下错误:
在“/”应用程序的服务器错误。 操作契约“IFileTransferService” UploadFile“使用具有SOAP头一个MessageContract。 SOAP头不被无MessageVersion支持。
不幸的是谷歌搜索,因为它没有产生任何显著的结果,帮助我。 你们可以帮助我吗? 这里的服务的细节(我已删除的原因的空间下载部分)。
[ServiceContract(Namespace = "http://www.acme.org/2009/04")]
public interface IFileTransferService
{
[OperationContract(Action = "UploadFile")]
void UploadFile(FileUploadMessage request);
}
[MessageContract]
public class FileUploadMessage
{
[MessageHeader(MustUnderstand = true)]
public FileMetaData Metadata { get; set; }
[MessageBodyMember(Order = 1)]
public Stream FileByteStream { get; set; }
}
[DataContract(Namespace = "http://schemas.acme.org/2009/04")]
public class FileMetaData
{
[DataMember(Name="FileType", Order=0, IsRequired=true)]
public FileTypeEnum fileType;
[DataMember(Name="localFilename", Order=1, IsRequired=false)]
public string localFileName;
[DataMember(Name = "remoteFilename", Order = 2, IsRequired = false)]
public string remoteFileName;
}
我曾尝试同时使用basicHttpBinding的和customhttp有没有积极的效果结合:
<customBinding>
<binding name="customHttpBindingStream">
<textMessageEncoding messageVersion="Soap12" />
<httpTransport transferMode="Streamed" maxReceivedMessageSize="2147483647"/>
</binding>
</customBinding>
更新 :阅读文档在线似乎与MessageContracts流确实应该是可能的。 参见例如到MSDN( 大数据和流数据 ):
针对流传输编程模型
对于流媒体,编程模型非常简单。 用于接收流式数据,指定一个具有一个单一的数据流类型的输入参数的操作的合同。 返回流数据,返回一个流的参考。 [...]这条规则同样适用于消息的合同。 如下面的消息合约显示,你只能有一个单一的主体部件上是甲流的消息协定。 如果你想用流以传送更多的信息,这些信息必须在邮件标题的持有。 消息体专门预留给所述流中的内容。
[MessageContract]
public class UploadStreamMessage
{
[MessageHeader]
public string appRef;
[MessageBodyMember]
public Stream data;
}
我也看到从人完成文件上传的服务,博客文章和下载非常相似,我想(例如放在一起在这里 )。
更新2我试图创建一个小型控制台和自我托管与basicHttpBinding的服务,有它的工作原理就像一个魅力。 我开始相信,这个问题可能是在IIS托管。 任何的想法?
更新3见我自己的答案。