我对WCF很陌生,如果我误报了什么,我会提前道歉。
这是使用.NET 4.0 RC1。
使用wcf,我试图反序列化服务器的响应。基本响应只有一个流作为其MessageBodyMember。
public abstract class StreamedResponse
{
[MessageBodyMember]
public Stream Stream { get; set; }
public StreamedResponse()
{
this.Stream = Stream.Null;
}
}
这个类的派生版本实际上是序列化的,但它们没有MessageBodyMember属性(它们有其他基类型,如作为MessageHeader值列出的int、string等)。
[MessageContract]
public class ChildResponse : StreamedResponse
{
[DataMember]
[MessageHeader]
public Guid ID { get; set; }
[DataMember]
[MessageHeader]
public string FileName { get; set; }
[DataMember]
[MessageHeader]
public long FileSize { get; set; }
public ChildResponse() : base()
{
}
}
在我的特定情况下,流总是一个文件流(但不一定总是)。
起初,wcf说filestream不是一个已知类型,所以我将它添加到已知类型列表中,现在它将序列化。乍一看,它似乎还可以在客户端反序列化它(它是文件流类型)。
问题是它似乎不可用。所有的canread、canwrite等都是false,length、position等属性在使用时抛出异常。与readbyte()相同。
我缺少了什么会阻止我获得有效的文件流?