Я очень новичок в 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()
{
}
}
Поток всегда является FileStream, в моем конкретном случае (но не всегда).
Сначала WCF сказал, что FileStream не был известным типом, поэтому я добавил его в список известных типов, и теперь он сериализуется. На первый взгляд кажется также, что десериализовать его на стороне клиента (это тип FileStream).
Проблема в том, что он не может быть использован. Все CanRead, CanWrite и т. Д. Имеют значение false, а свойства Length, Position и т. Д. Выдают исключения при использовании. То же самое с ReadByte ().
Что мне не хватает, что помешало бы мне получить действительный FileStream?