C#-如何通过HTTP读取连续的XML流
我正试图找出一种最好的方法来使用来自服务的连续XML数据流,该服务通过HTTP将数据作为“常量”提要发送 我曾考虑过使用HttpWebRequest/Response,但我不确定如果数据只是连续地流式传输,它将如何运行C#-如何通过HTTP读取连续的XML流,c#,xml,http,httpwebrequest,C#,Xml,Http,Httpwebrequest,我正试图找出一种最好的方法来使用来自服务的连续XML数据流,该服务通过HTTP将数据作为“常量”提要发送 我曾考虑过使用HttpWebRequest/Response,但我不确定如果数据只是连续地流式传输,它将如何运行 有什么想法吗?我以前做过,不是用XML,而是用需要解析的数据来更改应用程序的状态。HttpWebResponse.GetResponseStream()方法对此工作正常。完成后,请确保在此流上调用Close()。我建议最后一个街区 HttpWebRequest req; try
有什么想法吗?我以前做过,不是用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("<![CDATA[{0}]]>", reader.Value);
break;
case XmlNodeType.ProcessingInstruction:
Console.Write("<?{0} {1}?>", reader.Name, reader.Value);
break;
case XmlNodeType.Comment:
Console.Write("<!--{0}-->", reader.Value);
break;
case XmlNodeType.XmlDeclaration:
Console.Write("<?xml version='1.0'?>");
break;
case XmlNodeType.Document:
break;
case XmlNodeType.DocumentType:
Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value);
break;
case XmlNodeType.EntityReference:
Console.Write(reader.Name);
break;
case XmlNodeType.EndElement:
Console.Write("</{0}>", reader.Name);
break;
}
}
}
finally
{
if (req != null)
req.Close();
}
HttpWebRequest请求;
尝试
{
req=(HttpWebRequest)WebRequest.Create(“http://www.example.com");
Stream=req.GetResponseStream();
XmlTextReader=新的XmlTextReader(流);
while(reader.Read())
{
开关(reader.NodeType)
{
case XmlNodeType.Element:
Console.Write(“,reader.Name);
打破
案例XmlNodeType.Text:
Console.Write(reader.Value);
打破
案例XmlNodeType.CDATA:
Console.Write(“,reader.Value”);
打破
案例XmlNodeType.ProcessingInstruction:
Console.Write(“,reader.Name,reader.Value);
打破
案例XmlNodeType.Comment:
Console.Write(“,reader.Value”);
打破
案例XmlNodeType.XmlDeclaration:
控制台。写(“”);
打破
案例XmlNodeType.Document:
打破
案例XmlNodeType.DocumentType:
Write(“应该能够相当轻松地完成此操作。您需要通过调用response.GetResponseStream()来获取响应流,然后在循环中使用异步ResponseStream.beginhead()
响应上没有超时设置,但如果您始终收到发送的数据,则应该可以。我认为需要一些小的更正才能使代码正常工作。没有HttpWebRequest.GetResponseStream()
方法。您需要使用HttpWebRequest.GetResponse()
获取HttpWebResponse
对象并调用GetResponseStream()
关于这一点。同样在finally
块中,不使用req
,而是使用前面提到的响应
。同意,我只是从内存中键入,而不是从实际项目中键入。这对XML如何起作用?在下载整个XML文档之前,XML将无效,这与流媒体的目的背道而驰。