środa, 11 września 2013

Syndication programming model

Tytuł postu po angielsku - pod taką nazwą łatwiej znaleźć dodatkowe materiały w sieci, a tłumaczenie jej na polski nie przysłużyłoby mi czytelników :)

O co więc chodzi? Syndication programming model to nic innego jak udostępnianie danych w niezależnym formacie. Model ten jest wykorzystywany szczególnie w przypadku blogów. Na pewno każdy spotkał się z terminem kanału RSS. Udostępnienie kanału RSS w przypadku .NET jest niezwykle proste. Framework oferuje dwie gotowe klasy Atom10FeedFormatter oraz Rss20FeedFormatter.

Implementację rozpoczynamy od dodania dwóch atrybutów na interfejs serwisu:


Code:
    [ServiceKnownType(typeof(Atom10FeedFormatter))]
    [ServiceKnownType(typeof(Rss20FeedFormatter))]
    [ServiceContract]
    public interface IService1

Do interfejsu dodajemy metodę odpowiedzialną za generowanie zawartości kanału:


Code:
        [WebGet(UriTemplate = "personsFeed")]
        SyndicationFeedFormatter GetPersonFeed();

Ostatni etap to implementacja metody:

Code:
        public SyndicationFeedFormatter GetPersonFeed()
        {
            var persons = new List<Person>
            {
                new Person {Id = 1, Name = "Patryk"},
                new Person {Id = 2, Name = "Marek"},
                new Person {Id = 3, Name = "Sebastian"},
                new Person {Id = 4, Name = "Ania"}
            };

            var feed = new SyndicationFeed(persons.Select(x => new SyndicationItem(x.Id.ToString(), x.Name, null)));
            string format = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["format"];
            if (!string.IsNullOrWhiteSpace(format) && format.Equals("atom"))
            {
                return new Atom10FeedFormatter(feed);
            }
            return new Rss20FeedFormatter(feed);
        }


Serwis możemy podglądnąć w przeglądarce:






Przykładowy wynik jest bardzo prostym zastosowaniem kanału RSS. Więcej o możliwościach i architekturze RSS można poczytać na stronach msdn.

Brak komentarzy:

Prześlij komentarz