C# – 如何通过HTTP读取连续的XML流

我试图找出从服务中获取连续XML数据流的最佳方法,该服务将数据作为HTTP上的“常量”提要发送。

我正在考虑使用HttpWebRequest / Response,但我不确定如果数据只是连续流式传输会如何。

有什么想法吗?

我之前已经完成了这项工作,不是使用XML,而是需要针对应用程序的状态更改解析数据。 HttpWebResponse.GetResponseStream()方法对此工作正常。 完成后,请务必在此流上调用Close()。 我建议最终阻止。

HttpWebRequest req; try { req = (HttpWebRequest)WebRequest.Create("http://www.example.com"); Stream stream = req.GetResponseStream(); byte[] data = new byte[4096]; int read; while ((read = data.Read(data, 0, data.Length)) > 0) { Process(data, read); } } finally { if (req != null) req.Close(); } 

或者,或者:

 HttpWebRequest req; try { req = (HttpWebRequest)WebRequest.Create("http://www.example.com"); Stream stream = req.GetResponseStream(); XmlTextReader reader = new XmlTextReader(stream); while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: Console.Write("<{0}>", reader.Name); break; case XmlNodeType.Text: Console.Write(reader.Value); break; case XmlNodeType.CDATA: Console.Write("", reader.Value); break; case XmlNodeType.ProcessingInstruction: Console.Write("", reader.Name, reader.Value); break; case XmlNodeType.Comment: Console.Write("", reader.Value); break; case XmlNodeType.XmlDeclaration: Console.Write(""); break; case XmlNodeType.Document: break; case XmlNodeType.DocumentType: Console.Write("", reader.Name); break; } } } finally { if (req != null) req.Close(); } 

应该能够相当容易地做到这一点。 您需要通过调用Response.GetResponseStream()获取响应流,然后在循环中使用异步ResponseStream.BeginRead()。

响应中没有超时设置,但如果您一直收到数据,那么应该没问题。