0

これで、最初の呼び出しで機能するコードができ、Facebook での最新の通知を RSS 経由で知ることができます。しかし、2 回目のポーリングを行うと、rssReader オブジェクトの作成直前に \ フリーズします。

private string getLatest()
    {
        var req = (HttpWebRequest)WebRequest.Create(rssFeedURL);
        req.Method = "GET";
        req.UserAgent = "Fiddler";

        var rep = req.GetResponse();
        var rssReader = XmlTextReader.Create(rep.GetResponseStream());

        if(rssReader.ReadToFollowing("item"))
        {                
            rssReader.ReadToFollowing("title");
            return rssReader.ReadElementContentAsString();   
        }
        return latest;
    }

これがなぜなのか誰か教えてもらえますか?(このコードは、動作する他のコードとほぼ同じです)

次の関数で呼び出されます。

public string alertFeed()
{
    string re = getLatest();
    if (re.Equals(latest))
            return null;
            latest = re;
            return "Facebook Notification, " + re;
    }
}

編集:

興味のある人のために、修正されたコードを次に示します。

    private string getLatest()
    {

        var req = (HttpWebRequest)WebRequest.Create(rssFeedURL);
        req.KeepAlive = false;
        req.Method = "GET";
        req.UserAgent = "Fiddler";
  --->  using (WebResponse rep = req.GetResponse())
        {
            var rssReader = XmlTextReader.Create(rep.GetResponseStream());

            if (rssReader.ReadToFollowing("item"))
            {
                rssReader.ReadToFollowing("title");
                return rssReader.ReadElementContentAsString();
            }
  --->  }
        return latest;
    }

指摘された部分は、Gratz が指摘したように、私が追加しなければならなかったものであり、rep.Close(); を使用することもできました。

4

1 に答える 1

0

WebResponse "rep" を閉じていないためかもしれません

rep.Close();
于 2013-03-04T08:44:17.847 に答える