Можно ли передать файл с помощью WCF с помощью MessageContract, который содержит другой MessageContract, внутри которого находится Stream? Я думаю, что ответ отрицательный, но я бы предпочел упаковать свой файл, так сказать, в сообщение «Root».
Другими словами, моя установка такова:
[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;
}
Запрос отправляется и принимается в службу нормально, однако похоже, что поток не десериализуется должным образом и возвращается как пустая ссылка. Я знаю, что где-то читал правило, в котором говорится в MessageContract с Streaming, что Stream ДОЛЖЕН быть телом MessageContract, и я думаю, что это то, что сейчас нарушается. Я надеялся, что FileTransferMessage, являющийся телом, а затем Stream, являющийся телом, будет приемлемым.
У кого-нибудь есть предложения о том, что я могу здесь сделать? Я бы предпочел НЕ добавлять Stream / FileName / FileLength к моему транспортному объекту.