1

XML データを継続的にプッシュしているサーバーに (HttpWebRequest と HttpWebResponse を使用して) 接続しています。私が必要としているのは、データを読み取り、オンラインでデータセットに保存することです。現在、これは私がしていることです:

        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 関数で例外が発生します。この問題を解決するにはどうすればよいですか?

4

2 に答える 2

2

「継続的に」という言葉が決して終わることなくという意味である場合、DataSet はこのように使用するように設計されていないため、使用しないでください。

そうは言っても、あなたが抱えている問題は、読み取っているネットワーク データが任意に断片化される可能性があるため、有効な XML フラグメントを取得することさえできないということです。代わりにXmlReader、応答ストリームで を使用して、そこから読み取る必要があります。これにより、断片が元に戻るからです。

ただし、これを直接渡してReadXml()も停止しないため、うまくいきません。XmlReaderしたがって、最終的には、解析されたフラグメントを から読み取り、必要なデータ ストレージにこれらを手動で挿入する単純なコードになる可能性があります。

于 2013-10-12T11:30:50.300 に答える