2009-07-31 5 views
2

J'essaie de faire quelque chose de vraiment simple en théorie: désérialiser une chaîne à un message, voici le code:Pourquoi une exception XmlException "Fin de fichier inattendue" avec TextMessageEncodingBindingElement?

[TestMethod] 
public void EncoderErrorTest() 
{ 
    var message = "<s:Envelope xmlns:s=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:a=\"http://www.w3.org/2005/08/addressing\"><s:Header><a:Action s:mustUnderstand=\"1\">http://tempuri.org/IHelloWorldService/SayHello</a:Action></s:Header><s:Body><SayHello xmlns=\"http://tempuri.org/\"><name>Nico</name></SayHello></s:Body></s:Envelope>"; 

    MemoryStream stream = new MemoryStream(); 
    StreamWriter writer = new StreamWriter(stream); 
    writer.Write(message); 
    stream.Position = 0; 
    var soapMessage = new TextMessageEncodingBindingElement().CreateMessageEncoderFactory().Encoder.ReadMessage(stream, 99999); 
    Assert.IsNotNull(soapMessage); 
} 

Mais lors de la désérialisation je reçois un XmlException « Fin de fichier inattendue ». Quelque chose ne va pas avec mon code?

Merci d'avance pour vos réponses.

Répondre

8

Essayez d'appeler Flush sur votre StreamWriter avant de lire le flux (ou, mieux encore, placez-le dans un using -block).

+0

merci, quelle honte -_- –

+0

Autour du flux ainsi. –

+0

'MemoryStream' n'est pas mis en cache, autant que je sache (ce serait plutôt inutile - pourquoi faire un cache mémoire pour un flux sauvegardé en mémoire?), Mais ça ne ferait pas de mal de toute façon. –

Questions connexes