1

C#でライブマッチスコアを取得して表示できる小さなデスクトップスコアボードを作成しようとしています。これで、ボタンクリックでXdocument.load(url)メソッドを呼び出すと、初めて最新のスコアが読み込まれ、ボタンクリックで実行するようにXdocument.load()が定義されていても、同じスコアが表示され続けます(フォームは読み込まれますが、違いはないと思います)。今、私がグーグルとスタックオーバーフローで見つけたものは、ファイルがいつ更新されるか、そして関連するものを見るようなものです。ただし、これらはすべてローカルxmlファイル用です。問題を解決するにはどうすればよいですか?

     public Form1()
    {
        InitializeComponent();
       // WebRequest.DefaultCachePolicy = new RequestCachePolicy(RequestCacheLevel.Revalidate);   
        feed = XDocument.Load(url);


    }

    private void button1_Click(object sender, EventArgs e)
    {
        feed = XDocument.Load(url + "?_=" + Guid.NewGuid().ToString());
         feed=XDocument.Load(url);
       // var nofmlive = feed.Root.Element("match").Attribute("srs");
        var output = GetItems();
        foreach (var v in output) {
       //rest of the code,,just to get and show data of all matches which are currently live
4

1 に答える 1

4

多分XDocumentデータをキャッシュしています。Guidクエリ文字列パラメーターパラメーターを追加して、キャッシュを無効にしてみてください。

var doc = XDocument.Load(url + "?_=" + Guid.NewGuid().ToString());

URLにクエリ文字列パラメータがすでに含まれている場合は、 ?withを調整します。&

キャッシュポリシーを変更することもできますが、このアプローチの欠点は、すべてのHTTPリクエストに対してグローバルであるということです。

WebRequest.DefaultCachePolicy = new RequestCachePolicy(RequestCacheLevel.Revalidate);
var doc = XDocument.Load(url);

または、WebClientを使用してXMLをロードし、それをXDocumentにフィードしてみることもできます。

using (var client = new WebClient())
{
    string xml = client.DownloadString("http://synd.cricbuzz.com/j2me/1.0/livematches.xml?_=" + Guid.NewGuid().ToString());
    var doc = XDocument.Parse(xml);
}
于 2012-09-18T16:11:31.353 に答える