2009-11-20 4 views
1

Je le code XML suivant qui est construit à l'exécution en utilisant un XmlDocument:XmlDocument.Save en omettant des éléments

<?xml version="1.0" standalone="yes"?> 
<NewConfig xmlns="http://tempuri.org/NewConfig.xsd"> 
    <SystemReference xmlns=""> 
    <ID>1</ID> 
    <Name>CountryName</Name> 
    </SystemReference> 
    <ClientList xmlns=""> 
    <Type>Private</Type> 

    <!-- elements omitted... --> 

    <VAT>1234567890</VAT> 
    </ClientList> 
</NewConfig> 

Je sauve ce XML à un socket TCP avec le code suivant:

TcpClient client = ... 
XmlDocument configDocument = ... 

using (StreamWriter writer = new StreamWriter(client.GetStream())) 
{ 
    writer.AutoFlush = true; 
    configDocument.Save(writer); 
    writer.WriteLine(); 
} 

Mais cela provoque la tronçure du code XML reçu par l'autre extrémité du socket - les deux derniers éléments (</ClientList> et </NewConfig>) ne sont jamais présents.

Cependant, si j'utilise le code suivant, le XML est envoyé avec succès:

TcpClient client = ... 
XmlDocument configDocument = ... 

using (StreamWriter writer = new StreamWriter(client.GetStream())) 
{ 
    writer.AutoFlush = true; 
    writer.WriteLine(configDocument.OuterXml); 
} 

Ma question est donc: Est-ce que quelqu'un sait pourquoi XmlDocument.Save() semble ignorer les éléments de fermeture lors de l'écriture à la Stream?

Répondre

1

Il n'y a rien de mal dans les deux façons d'envoyer les données. Quel est le problème est la façon dont vous lisez le XML sur le côté serveur. Par exemple en utilisant la première méthode et l'écouteur suivant, j'ai pu obtenir le XML complet:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var listener = new TcpListener(IPAddress.Loopback, 9999); 
     listener.Start(); 
     while (true) 
     { 
      var client = listener.AcceptTcpClient(); 
      using (var stream = client.GetStream()) 
      using (var reader = new StreamReader(stream)) 
      { 
       Console.WriteLine(reader.ReadToEnd()); 
      } 
     } 
    } 
} 
Questions connexes