Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В примере DiagnosticsFeed показано, как создать RSS/Atom-канал для синдикации с помощью Windows Communication Foundation (WCF). Это базовая программа Hello World, которая показывает основы объектной модели и как настроить ее в службе Windows Communication Foundation (WCF).
Модели каналов синдикации в WCF описываются как операции службы, возвращающие специальный тип данных SyndicationFeedFormatter. Экземпляры SyndicationFeedFormatter могут сериализовать канал в форматах RSS 2.0 и Atom 1.0. В следующем примере кода показан используемый контракт.
[ServiceContract(Namespace = "")]
interface IDiagnosticsService
{
[OperationContract]
//The [WebGet] attribute controls how WCF dispatches
//HTTP requests to service operations based on a URI suffix
//(the part of the request URI after the endpoint address)
//using the HTTP GET method. The UriTemplate specifies a relative
//path of 'feed', and specifies that the format is
//supplied using a query string.
[WebGet(UriTemplate="feed?format={format}")]
[ServiceKnownType(typeof(Atom10FeedFormatter))]
[ServiceKnownType(typeof(Rss20FeedFormatter))]
SyndicationFeedFormatter GetProcesses(string format);
}
Операция GetProcesses аннотирована атрибутом WebGetAttribute, который позволяет управлять тем, как WCF направляет HTTP-запросы GET к операциям службы, и указывать формат отправляемых сообщений.
Как и любая служба WCF, веб-каналы синдикации могут размещаться в любом управляемом приложении. Для правильной работы служб синдикации требуется конкретная привязка (WebHttpBinding) и специфичное поведение конечной точки (WebHttpBehavior). Новый WebServiceHost класс предоставляет удобный API для создания таких конечных точек без определенной конфигурации.
WebServiceHost host = new WebServiceHost(typeof(ProcessService), new Uri("http://localhost:8000/diagnostics"));
//The WebServiceHost will automatically provide a default endpoint at the base address
//using the proper binding (the WebHttpBinding) and endpoint behavior (the WebHttpBehavior)
Кроме того, можно использовать WebServiceHostFactory из файла SVC, размещенного в IIS, для обеспечения эквивалентной функциональности (этот метод не демонстрируется в этом примере кода).
<% @ServiceHost Language="C#|VB" Debug="true" Service="ProcessService" %>
Так как эта служба получает запросы с помощью стандартного HTTP GET, вы можете использовать любой клиент с поддержкой RSS или ATOM для доступа к службе. Например, вы можете просмотреть выходные данные этой службы, перейдя на http://localhost:8000/diagnostics/feed/?format=atom или http://localhost:8000/diagnostics/feed/?format=rss в браузере с поддержкой RSS.
Вы также можете использовать How the WCF Syndication Object Model Maps to Atom and RSS для чтения синдицированных данных и их обработки с помощью императивного кода.
XmlReader reader = XmlReader.Create( "http://localhost:8000/diagnostics/feed/?format=rss",
new XmlReaderSettings()
{
//MaxCharactersInDocument can be used to control the maximum amount of data
//read from the reader and helps prevent OutOfMemoryException
MaxCharactersInDocument = 1024 * 64
} );
SyndicationFeed feed = SyndicationFeed.Load(reader);
foreach (SyndicationItem i in feed.Items)
{
XmlSyndicationContent content = i.Content as XmlSyndicationContent;
ProcessData pd = content.ReadContent<ProcessData>();
Console.WriteLine(i.Title.Text);
Console.WriteLine(pd.ToString());
}
Настройка, сборка и запуск примера
Убедитесь, что у вас есть право на регистрацию адресов для HTTP и HTTPS на компьютере, как описано в инструкции по настройке в One-Time Setup Procedure for the Windows Communication Foundation Samples.
Создайте решение.
Запустите консольное приложение.
Пока консольное приложение запущено, перейдите по адресу
http://localhost:8000/diagnostics/feed/?format=atomилиhttp://localhost:8000/diagnostics/feed/?format=rssс помощью браузера с поддержкой RSS.