首次从NetworkStream读取后,XmlReader会阻塞

时间:2012-09-26 07:42:09

标签: deserialization xmlreader networkstream

我遇到了从网络流反序列化数据的问题。打开套接字后,第一个读取语句成功,但后续尝试反序列化数据块而没有错误(尽管它最终会超时)。

我已检查过正确的数据是否已发送且是否正确形成。为了确认这一点,我尝试了相同的代码和相同的数据,但使用了文件流。我没有得到相同的行为 - 反序列化步骤不会阻止。

我意识到文件流和网络流有一些差异但我希望行为是一样的。

TcpClient client = new TcpClient();
client.Connect(Server, Port);
NetworkStream stream = client.GetStream();

XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;

XmlReader reader = XmlReader.Create(stream, settings);

MyData recievedData;
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyData ));

while (reader.Read())
{
  if (reader.NodeType == XmlNodeType.Element && xmlReader.Name == "MyRoot")
  {
    // The following statement blocks
    recievedData= (MyData)xmlSerializer.Deserialize(reader);
  }
}

经过一些额外的测试后,我注意到如果我强制服务器重新发送相同的消息,反序列化步骤将正确恢复。然而,subseqent read语句也将起作用(拾取重复的消息),然后在反序列化步骤中再次阻塞。

可能还值得一提的是,消息是单个元素。如下所示:

<MyRoot xmlns="http://www.mydomain.com/mydata" someattribute="123" />

0 个答案:

没有答案