RSS Viewer Web Part Making Excessive Requests

I was investigating a scenario in which someone was seeing thousands of hits to the destination location of an RSS Viewer Web Part. They had the Feed Refresh Interval set to 120 minutes, and increasing the value did not seem to reduce the number of requests hitting the RSS Feed page.

We were able to track this down to how the RSS Feed requests are cached. The RSS Viewer Web Part leverages the XmlUrlDataSource class to call the location for the RSS Feed.  This class is also responsible for handling the cache of the response from the RSS Feed. The reason this is important, is because this class creates a cache key in the following format:

      URL + tab + Name

This would indicate that for each RSS Viewer Web Part, if you set the cache for 24 hours, you will end up with a request for each distinct user back to the RSS Feed.  For example, if you have 1,000 distinct users accessing a page with the RSS Viewer web part, you would see 1,000 requests to the RSS Feed location.

To validate what I was finding, I put together a Visual Web Part that dumps out the keys in the ASP.Net Cache. This cannot be a sandboxed solution due to the code needing to execute in the application pool hosting ASP.Net, and it’s associated cache.

ASCX file has the following:

<asp:BulletedList ID=”BulletedList1” runat=”server”/>

Page load in the .cs file has the following:

    1: ArrayList keys = new ArrayList();
    3: foreach(DictionaryEntry cacheEntry in HttpRuntime.Cache)
    4: {
    5:     keys.Add(cacheEntry.Key);
    6: }
    8: BulletedList1.DataSource = keys;
    9: BulletedList1.DataBind();

I then added an RSS Viewer Web Part to a page pointing to an anonymous feed on TechNet. Then added my visual web part.  I logged into SharePoint with two separate accounts, and the Visual Web Part output shows two separate cache entries.  In my case, I have a domain with my account, as well as an account for Bob Smith. The cache has the following two entries:     Bob Smith     Jerry Orman