C# 在服务器持续推送xml时使用dataSet.ReadXml

C# 在服务器持续推送xml时使用dataSet.ReadXml,c#,xml,httpwebrequest,C#,Xml,Httpwebrequest,我正在连接(使用HttpWebRequest和HttpWebResponse)到一个不断推送XML数据的服务器。我需要的是读取数据并将其存储到在线数据集中。 目前我所做的就是: HttpWebRequest httpRequest; string url = "something"; System.Data.DataSet dataSet = new System.Data.DataSet(); httpRequest = (Htt

我正在连接(使用HttpWebRequest和HttpWebResponse)到一个不断推送XML数据的服务器。我需要的是读取数据并将其存储到在线数据集中。 目前我所做的就是:

        HttpWebRequest httpRequest;
        string url = "something";
        System.Data.DataSet dataSet = new System.Data.DataSet();
        httpRequest = (HttpWebRequest)WebRequest.Create(url);
        httpRequest.Credentials = new NetworkCredential("username", "pass");
        ServicePointManager.ServerCertificateValidationCallback = ((sender1, certificate, chain, sslPolicyErrors) => true);
        byte[] buf = new byte[1024];
        HttpWebResponse response;
        int count = -1;
        string read = string.Empty;
        response = (HttpWebResponse)httpRequest.GetResponse();
        do
        {
            count = response.GetResponseStream().Read(buf, 0, buf.Length);
            read += Encoding.UTF8.GetString(buf, 0, count);
            dataSet.ReadXml(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(read)));
        } while (response.GetResponseStream().CanRead && count != 0);
但是,由于在每个循环中都会收到xml数据的一部分,因此ReadXml函数将导致异常。
我能做些什么来解决这个问题呢?

你试过排队吗

dataSet.ReadXml(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(read)));
在do while循环之外,然后使while子句仅计算计数:

while (count > 0);
将响应流的实例置于循环之外也会很有帮助。在每个循环上调用
GetResponseStream()
可能会产生不可预见的后果。

如果“连续”的意思是没有结束,那么您不应该使用数据集,因为它不是这样设计的

也就是说,您所面临的问题是,您正在读取的网络数据可能会被任意切割成碎片,因此您甚至无法获得有效的XML片段。相反,您应该在响应流上使用
XmlReader
,并从中读取,因为这将把各个部分重新组合在一起


但是,直接将其传递到
ReadXml()
不会起作用,因为它永远不会停止。因此,您可能会得到一些简单的代码,从
XmlReader
读取解析后的片段,然后手动将这些片段插入到您想要的任何数据存储中。

是的,但我们不会脱离循环。只是在我最初的回答中增加了一些建议没有改变,真正的问题是卢塞罗所说的。我想我必须忘记使用dataset.ReadXml()是的-我错过了关于“持续”的关键部分-很高兴你弄明白了;-)你说得对,我想最后我必须这么做,我真的很讨厌这样做。好吧,为了获得流式计算支持,你可能想研究MS.NET XML类的替代方案。我相信这一点,并且有这种内在的支持。