2009-11-20 2 views
1

XmlDocument :XmlDocument.Save 생략 요소 내가 런타임에 구축되어 다음과 같은 XML 사용했다

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

나는 다음과 같은 코드를 사용하여 TCP 소켓이 XML을 절약 해요 :

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

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

하지만 소켓의 다른 쪽 끝에서 수신 된 XML이 잘 리게됩니다. 마지막 두 요소 (</ClientList></NewConfig>)는 절대로 존재하지 않습니다. 나는 다음과 같은 코드를 사용하는 경우

그러나 XML이 성공적으로 전송됩니다

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

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

내 질문에 따라서이다 XmlDocument.Save()Stream에 기록 할 때 닫는 요소를 무시하는 것 같다 사람이 왜 알고 있나요?

답변

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()); 
      } 
     } 
    } 
} 
관련 문제