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

C#-如何通过HTTP读取连续的XML流,c#,xml,http,httpwebrequest,C#,Xml,Http,Httpwebrequest,我正试图找出一种最好的方法来使用来自服务的连续XML数据流,该服务通过HTTP将数据作为“常量”提要发送 我曾考虑过使用HttpWebRequest/Response,但我不确定如果数据只是连续地流式传输,它将如何运行 有什么想法吗?我以前做过,不是用XML,而是用需要解析的数据来更改应用程序的状态。HttpWebResponse.GetResponseStream()方法对此工作正常。完成后,请确保在此流上调用Close()。我建议最后一个街区 HttpWebRequest req; try

我正试图找出一种最好的方法来使用来自服务的连续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("<![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将无效,这与流媒体的目的背道而驰。