是否可以使用带有 MessageContract 的 WCF 流式传输文件,该 MessageContract 包含另一个 MessageContract,其中包含 Stream?我认为答案是否定的,但可以这么说,我更愿意将我的文件打包在“根”消息中。
换句话说,我的设置是这样的:
[MessageContract]
public class Transport
{
[MessageHeader]
private readonly Guid fId;
[MessageHeader]
private readonly DateTime fTimestamp;
[MessageBodyMember(Order = 1)]
public FileTransferMessage FileTransferMessage { get; set; }
}
[MessageContract]
public class FileTransferMessage : IDisposable
{
[MessageBodyMember(Order = 1)]
public Stream FileByteStream;
[MessageHeader(MustUnderstand = true)]
public long FileLength;
[MessageHeader(MustUnderstand = true)]
public string FileName;
}
请求可以很好地发送和接收到服务,但是,Stream 似乎没有被正确反序列化并作为空引用返回。我知道我在某处阅读了一条规则,该规则在带有 Streaming 的 MessageContract 上声明 Stream 必须是 MessageContract 的主体,我认为这就是现在被违反的内容。我希望 FileTransferMessage 作为 Body,然后 Stream 作为 Body 是可以接受的。
有人对我可以在这里做什么有任何建议吗?我不希望将 Stream/FileName/FileLength 添加到我的 Transport 对象中。