NET и C#, Предоставяне на RSS и Atom канали

Четенето на синдикирани емисии е само един случай на използване на Syndication API. Друг случай включва предоставяне на синдикирани емисии на RSS и Atom клиенти. За да направите това, Visual Studio предлага шаблона Syndication Service Library, който е добра отправна точка. Този шаблон съдържа препратка към библиотеката System.ServiceModel и предоставя възможност за добавяне на конфигурационен файл на приложение за дефиниране на WCF крайна точка.

За да предоставите данни за синдикиран канал, е удобно да използвате ADO.NET Entity Framework. Предоставеното тук примерно приложение използва база данни на Формула 1, която можете да изтеглите от следната връзка - Formula1Model. Първо към проекта се добавя елемент на ADO.NET Entity Data Model с име Formula1. Таблиците Racers, RaceResults, Races и Circuits се съпоставят с класовете обекти Racer, RaceResult, Race и Circuit, както е показано на фигурата:

atom

След това файлът IFormula1Feed.cs се създава в шаблона на проекта, за да хоства договора за услуга на WCF. Интерфейсът съдържа метод CreateFeed(), който връща SyndicationFeedFormatter. Тъй като SyndicationFeedFormatter е абстрактен клас и в действителност върнатият клас е или от тип Atom10FeedFormatter, или от тип Rss20FeedFormatter, тези типове са изброени вServiceKnownTypeAttribute, така че типът да е известен и да може да бъде сериализиран.

АтрибутътWebGet показва, че операцията може да бъде извикана от обикновена HTTP GET заявка, която може да се използва за заявяване на синдикирани канали. WebMessageBodyStyle.Bare указва, че резултатът (XML от канала, който се синдикира) трябва да бъде изпратен такъв, какъвто е, бездобавяне на XML обвиващ елемент около него:

Внедряването на услугата се извършва в клас Formula1Feed. Тук се създава елемент SyndicationFeed и се присвояват различни свойства на този клас, като например генератор, език, заглавие, категории и автори. Свойството Items се попълва с резултатите от LINQ заявка, която извлича информация за победителите във Формула 1 за конкретна дата. В конструкцията за избор на тази заявка се създава нов анонимен тип и се попълва с няколко свойства. След това тези свойства се използват от метода Select() за създаване на SyndicationItem обекти, представляващи победителите.

SyndicationItem настройва свойството Title на обикновен текст, съдържащ информация за страната, в която се е провело състезанието. Свойството Съдържание се попълва с помощта на LINQ към XML. Класовете XElement се използват за създаване на XHTML код, който може да се интерпретира от браузър. В резултат на всичко това съдържанието показва датата на провеждане на състезанието, държавата, в която е проведено, както и името на участника, който го е спечелил.

В зависимост от това кой низ на заявка се използва за заявката за синдикиране, SyndicationFeed се форматира с помощта на Atom10FeedFormatter или Rss20FeedFormatter:

Изпълнението на тази услуга във Visual Studio ще стартира WCF Service Host, за да я обслужва, а Internet Explorer ще покаже форматиран резултат от емисия с URL параметъра ?from=1970/1/1&to=1971/1/1.