C#(ASP.net)中RSS源的最佳实现

时间:2009-05-28 18:10:42

标签: asp.net performance architecture rss syndication

我有一个需要提供Feed的网络应用程序(asp.net)。所以我使用System.ServiceModel.Syndication命名空间来创建创建“新闻”的函数。事情就是每当有人调用它时执行它,我应该只使用它来创建一个xml文件并让我的rss url指向该文件吗?

最好的方法是什么?

编辑:也许这就是我错了。我没有使用处理程序......我只是使用WCF服务返回带有数据的Rss20FeedFormatter。

3 个答案:

答案 0 :(得分:8)

在我实施RSS的过去,我在HttpContext.Current.Cache中缓存了RSS数据。

RSS数据通常不必经常更新(例如,每分钟一次就足够了),因此您只需每分钟实际访问一次DB,而不是每次有人请求您的RSS数据。

以下是如何使用缓存的示例:

// To save to the cache
HttpContext.Current.Cache.Insert("YourCachedName", pObjectToCache, null, DateTime.UtcNow.AddMinutes(1), System.Web.Caching.Cache.NoSlidingExpiration);
// To fetch from the cache
YourRssObject pObject = HttpContext.Current.Cache[("YourCachedName"] as YourRssObject : null;

您还可以在ashx中设置以下内容:

context.Response.Cache.SetExpires(DateTime.Now.AddMinutes(1));

这将使您的RSS页面提供缓存版本,直到它过期。这需要更少的资源,但如果您有其他使用RSS数据访问层调用的东西,那么这将不会缓存该数据。

您还可以通过设置:

,根据您的RSS可能收到的查询参数进行缓存
context.Response.Cache.VaryByParams["YourQueryParamName"] = true;

答案 1 :(得分:1)

ASP.Net内置了一些非常好的服务器端缓存。假设您使用这些类作为普通aspx页面或http处理程序(ashx)的一部分,您可以告诉ASP.Net积极地缓存它而不是重新 - 根据每个请求构建您的Feed。

答案 2 :(得分:0)

在您的.aspx页面中,您不能只使用:

<%@ OutputCache Duration="60" VaryByParam="none" %>

我有一篇博文,其中我将存储过程的结果作为RSS Feed发送到我的手机HERE.