Лучшая реализация для RSS-канала в C # (ASP.net) - PullRequest
7 голосов
/ 28 мая 2009

У меня есть веб-приложение (asp.net), для которого требуется канал. Поэтому я использовал пространство имен System.ServiceModel.Syndication для создания функции, которая создает «новости». Дело в том, что он выполняется каждый раз, когда кто-то вызывает его, должен ли я использовать его просто для создания XML-файла и сделать так, чтобы мой rss-URL указывал на файл?

Какой лучший подход?

Редактировать: Может быть, в этом я и ошибаюсь. Я не использую обработчик ... Я просто использую сервис WCF, возвращающий Rss20FeedFormatter с данными.

Ответы [ 3 ]

8 голосов
/ 28 мая 2009

В прошлом, когда я реализовывал RSS, я кэшировал данные RSS в HttpContext.Current.Cache.

Данные RSS обычно не нужно обновлять так часто (например, раз в минуту более чем достаточно), так что вам нужно будет просто нажимать на БД раз в минуту, а не каждый раз, когда кто-то запрашивает ваши данные 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 голос
/ 28 мая 2009

ASP.Net имеет довольно неплохое встроенное кэширование на стороне сервера. Предполагая, что вы используете эти классы как часть обычной страницы aspx или обработчика http (ashx), вы можете просто сказать ASP.Net, что нужно кэшировать его агрессивно, а не повторно -строить свой канал по каждому запросу.

0 голосов
/ 08 января 2011

На странице .aspx вы не можете просто использовать:

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

У меня есть запись в блоге, где у меня есть результаты сохраненного процесса, отправленного на мой телефон в виде канала RSS ЗДЕСЬ.

...