【发布时间】:2010-04-05 16:24:52
【问题描述】:
我是 WCF 的新手,所以如果我说错了什么,我提前道歉。
这是使用 .NET 4.0 RC1。
使用 WCF,我试图反序列化来自服务器的响应。基本响应有一个 Stream 作为其唯一的 MessageBodyMember。
public abstract class StreamedResponse
{
[MessageBodyMember]
public Stream Stream { get; set; }
public StreamedResponse()
{
this.Stream = Stream.Null;
}
}
这个类的派生版本实际上是序列化的,但它们没有 MessageBodyMember 属性(它们有其他基本类型,如 int、string 等作为 MessageHeader 值列出)。
[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()
{
}
}
在我的特定情况下,Stream 始终是 FileStream(但可能并非总是如此)。
起初,WCF 说 FileStream 不是已知类型,所以我将它添加到已知类型列表中,现在它会序列化。乍一看,它还似乎在客户端反序列化(它是 FileStream 类型)。
问题是它似乎不可用。 CanRead、CanWrite 等全部为 false,Length、Position 等属性在使用时抛出异常。与 ReadByte() 相同。
我缺少什么会阻止我获得有效的 FileStream?
【问题讨论】:
标签: c# wcf filestream