Je suis très nouveau à WCF, donc je m'excuse d'avance si je déforme quelque chose.Désérialisation d'un FileStream sur le client en utilisant WCF
Ceci utilise .NET 4.0 RC1. En utilisant WCF, j'essaye de désérialiser une réponse du serveur. La réponse de base a un flux en tant que seul MessageBodyMember.
public abstract class StreamedResponse
{
[MessageBodyMember]
public Stream Stream { get; set; }
public StreamedResponse()
{
this.Stream = Stream.Null;
}
}
Les versions dérivées de cette classe sont en fait ce qui est sérialisé, mais ils n'ont pas un attribut MessageBodyMember (ils ont d'autres types de base tels que int, string, etc. répertorié comme valeurs 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()
{
}
}
Le flux est toujours un FileStream, dans mon cas spécifique (mais peut ne pas l'être toujours). Dans un premier temps, WCF a déclaré que FileStream n'était pas un type connu, donc je l'ai ajouté à la liste des types connus et maintenant il se sérialise. Il semble également, à première vue, le désérialiser du côté du client (c'est le type FileStream).
Le problème est qu'il ne semble pas être utilisable. Toutes les propriétés CanRead, CanWrite, etc. sont fausses, et les propriétés Length, Position, etc, affichent des exceptions lorsqu'elles sont utilisées. Pareil avec ReadByte().
Qu'est-ce qui me manque pour obtenir un FileStream valide?