ストリームを含む別のMessageContractを含むMessageContractでWCFを使用してファイルをストリーミングすることは可能ですか?答えはノーだと思いますが、いわば「ルート」メッセージ内にファイルをパッケージ化したいと思います。
言い換えれば、私のセットアップは次のようになります。
[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;
}
リクエストはサービスに正常に送受信されますが、ストリームが適切に逆シリアル化されておらず、null参照として返されているようです。ストリーミングを使用したMessageContractで、StreamはMessageContractの本体でなければならないというルールをどこかで読んだことがありますが、それが現在違反していると思います。FileTransferMessageがBodyであり、次にStreamがBodyであることが受け入れられることを期待していました。
私がここで何ができるかについて誰か提案がありますか?Stream / FileName/FileLengthをTransportオブジェクトに追加したくありません。