我在反序列化网络流中的数据时遇到问题。打开套接字后,第一个读取语句成功,但随后尝试反序列化数据块而没有错误(尽管它最终会超时)。
我已检查是否发送了正确的数据并且格式正确。为了确认这一点,我尝试了相同的代码和相同的数据,但使用了文件流。我没有得到相同的行为 - 反序列化步骤不会阻塞。
我意识到文件流和网络流有一些差异,但我希望行为是相同的。
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);
}
}
经过一些额外的测试后,我注意到如果我强制服务器重新发送相同的消息,反序列化步骤将正确恢复。然而,随后的 read 语句也将起作用(拾取重复的消息),然后在反序列化步骤中再次阻塞。
可能还值得一提的是,消息是单个元素。类似于以下内容:
<MyRoot xmlns="http://www.mydomain.com/mydata" someattribute="123" />