NET і C#, Надання каналів RSS та Atom
Читання синдикованих каналів є лише одним із випадків застосування API-інтерфейсу Syndication. Інший випадок пов'язаний з наданням синдикованих каналів клієнтам 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, як показано на малюнку:

Потім у шаблоні проекту створюється файл IFormula1Feed.cs, де розміщується контракт служби WCF. В інтерфейсі міститься метод CreateFeed(), який повертає SyndicationFeedFormatter. Оскільки SyndicationFeedFormatter є абстрактним класом, а в реальності повертається клас або типу Atom10FeedFormatter, або типу Rss20FeedFormatter, ці типи перераховуються вServiceKnownTypeAttribute, щоб тип був відомий і могла виконуватися серіалізація.
Атрибут WebGet вказує, що операція може викликатися з простого HTTP-запиту GET, який може застосовуватися для запиту каналів, що синдикуються. WebMessageBodyStyle.Bare вказує, що результат (XML з каналу, що синдикується) повинен відправлятися в такому, як він є вигляді, бездодавання навколо нього елемента-оболонки XML:
Реалізація служби виконується у класі Formula1Feed. Тут створюється елемент SyndicationFeed і проводиться присвоєння різних властивостей цього класу, таких як Generator, Language, Title, Categories та Authors. Властивість Items заповнюється результатами з LINQ-запиту, який передбачає отримання інформації про переможців гонок Формули-1 за певну дату. У конструкції select цього запиту створюється новий анонімний тип, який заповнюється кількома властивостями. Ці властивості потім використовуються методом Select() для створення об'єктів SyndicationItem, що представляють переможців.
У SyndicationItem властивості Title присвоюється простий текст, що містить інформацію про країну, в якій проводилася гонка. Властивість Content заповнюється за допомогою LINQ to XML. Класи XElement використовуються для створення коду на мові XHTML, який може інтерпретуватися браузером. В результаті всього цього у вмісті відображається дата, коли відбувалися перегони, країна, в якій вони проходили, та ім'я учасника, який у ній переміг.
Залежно від того, який рядок запиту застосовується для запиту синдикації, SyndicationFeed форматується за допомогою Atom10FeedFormatter або Rss20FeedFormatter:
При запуску цієї служби в середовищі Visual Studio для її обслуговування запуститься WCF Service Host і в Internet Explorer з'явиться відформатований результат каналу з URL-параметром ?from=1970/1/1&to=1971/1/1.