2009-05-28 16 views
7

To, co mam, to aplikacja internetowa (asp.net), która musi mieć kanał. Tak więc użyłem przestrzeni nazw System.ServiceModel.Syndication, aby utworzyć funkcję, która tworzy "aktualności". Rzecz w tym, że jest ona wykonywana za każdym razem, gdy ktoś ją wywołuje, czy powinienem użyć jej tylko do utworzenia pliku xml i uczynienia mojego adresu URL rss plikiem?Najlepsza implementacja kanału RSS w języku C# (ASP.net)

Jakie jest najlepsze podejście?

Edycja: Może tam właśnie się mylę. Nie używam programu obsługi ... Używam tylko usługi WCF zwracającej Rss20FeedFormatter z danymi.

Odpowiedz

8

W przeszłości, gdy zaimplementowałem RSS, buforowałem dane RSS w pliku HttpContext.Current.Cache.

Dane RSS zwykle nie muszą być aktualizowane tak często (np. Raz na minutę to więcej niż wystarczające), więc trzeba by było uderzać DB tylko raz na minutę zamiast za każdym razem, gdy ktoś zażąda danych RSS .

Oto przykład, w jaki sposób korzystać z cache:

// 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; 

Można również ustawić następujące w ashx:

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

To sprawi, że strona RSS służyć do wersji z pamięci podręcznej do momentu wygaśnięcia. Zajmuje to jeszcze mniej zasobów, ale jeśli masz inne rzeczy, które używają wywołań warstwy dostępu do danych RSS, to nie buforuje tych danych.

Można również zrobić to cache w oparciu o param kwerendy że RSS może otrzymać również przez ustawienie:

context.Response.Cache.VaryByParams["YourQueryParamName"] = true; 
+0

Doceniam komentarze ... ale nie odpowiadają one na moje pytanie ... czy powinienem użyć cache'a są sugestie ng lub po prostu utworzyć plik statyczny? – sebagomez

+1

Wszystkie kanały, które zrobiłem, używają jednej z tych metod. Nigdy nie używałem statycznego pliku, ponieważ tak łatwo było nie martwić się o konieczność pisania nowych/zastępowania plików w locie. – Kelsey

1

ASP.Net ma wbudowane wbudowane wbudowane buforowanie po stronie serwera. Zakładając, że używasz tych klas jako części normalnej strony aspx lub procedury obsługi http (ashx), możesz po prostu powiedzieć ASP.Net, aby buforowała to agresywnie, a nie ponownie zbuduj swój kanał na każde żądanie.

0

W swojej strony .aspx nie można po prostu użyć:

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

Mam wpis na blogu, na którym mam wyniki zapisanego procesu wysłanego na mój telefon jako kanał RSS HERE.

Powiązane problemy