1

こんにちは、私は 7 つの小さな xml を読み取って結果を保存するこのアプリケーションを持っていますが、今では xml ファイルが変更されていない場合でもすべてをダウンロードします。

xml が新しいか変更されているかを確認したいのですが、解決策が見つかりません。おそらく単純な方法であり、より難しい方法でこれを達成しようとしています

誰でも助けてもらえますか?

アドバイスありがとうございます:)

これが私のATMコードです:

WebClient downloader = new WebClient();
downloader.DownloadStringAsync(new Uri("http://feeds.feedburner.com/bluey/eventi20" + "?" + System.DateTime.Now.ToString(), UriKind.RelativeOrAbsolute));
downloader.DownloadStringCompleted += new DownloadStringCompletedEventHandler(EventiDownloaded);

この方法でxmlのヘッダーでlastmodify、または使用できるものを探してみました

WebClient downloader = new WebClient();
downloader.DownloadStringAsync(new Uri("http://feeds.feedburner.com/bluey/eventi20" + "?" + System.DateTime.Now.ToString(), UriKind.RelativeOrAbsolute));
downloader.DownloadStringCompleted += new DownloadStringCompletedEventHandler(EventiDownloaded);
WebHeaderCollection myWebHeaderCollection = downloader.ResponseHeaders;
 foreach(var x in myWebHeaderCollection)
   for (int i = 0; i < myWebHeaderCollection.Count; i++)
      MessageBox.Show("\t" + myWebHeaderCollection.AllKeys.GetEnumerator() + " = " + myWebHeaderCollection.AllKeys.ElementAt(i));

しかし、myWebHeaderCollection で null 参照エラーが発生します

4

1 に答える 1

0

たぶん、ETag http://en.wikipedia.org/wiki/HTTP_ETagを使用してみることができます

ヘッダーのみ (コンテンツ全体ではなく) を要求し、ETag を取得して値を保存できます。したがって、ETag が変更された場合にのみ完全な要求を行う必要があります。私はこれを個人的にはしていません。私はあなたと同じ問題を抱えていましたが、私のフィードは週に一度更新されるので、この実装を含まない回避策を少し行いました。

とにかく、これはヘッダーのみのリクエストを示す簡単なサンプルであり、ETag が表示され、使用する値を抽出できます。

static void Main(string[] args)
{
    WebRequest webRequest = HttpWebRequest.Create("http://www.forexfactory.com/ffcal_week_this.xml");

    // Only request the headers, not the whole content
    webRequest.Method = "HEAD";
    var response = webRequest.GetResponse();

    for (int i = 0; i < response.Headers.Count; i++)
    {
        Console.WriteLine(response.Headers.Keys[i] + " : " + response.Headers[i]);
    }

    Console.Read();
}
于 2013-03-30T19:06:33.433 に答える