1

我在运行时使用以下 XML 构建XmlDocument

<?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>

我使用以下代码将此 XML 保存到 TCP 套接字:

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

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

但这会导致套接字另一端接收到的 XML 被截断 - 最后 2 个元素 (</ClientList></NewConfig>) 永远不会出现。

但是,如果我使用以下代码,则 XML 发送成功:

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

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

因此,我的问题是:有谁知道为什么XmlDocument.Save()在写信时似乎忽略了结束元素Stream

4

1 回答 1

1

两种发送数据的方式都没有问题。问题在于您在服务器端读取 XML 的方式。例如使用第一种方法和下面的监听器,我能够得到整个 XML:

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());
            }
        }
    }
}
于 2009-11-20T12:41:24.737 回答