Поделиться через


Пример автономного веб-канала диагностики

В примере 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 , который позволяет управлять способом отправки HTTP-запросов GET HTTP в операции службы и указания формата отправленных сообщений.

Как и любая служба WCF, веб-каналы синдикации могут размещаться в любом управляемом приложении. Для правильной работы служб синдикации требуются особая привязка (WebHttpBinding) и специальное поведение конечной точки (WebHttpBehavior). Новый класс WebServiceHost обеспечивает удобный программный интерфейс для создания таких конечных точек без особой конфигурации.

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 из размещенного в службах IIS файла SVC, чтобы обеспечить аналогичную функциональность (этот метод не показан в примере коде).

<% @ServiceHost Language="C#|VB" Debug="true" Service="ProcessService" %>

Поскольку эта служба получает запросы с использованием стандартного метода HTTP GET, для доступа к службе можно использовать любой клиент, поддерживающий RSS или ATOM. Например, вы можете просмотреть выходные данные этой службы, перейдя к http://localhost:8000/diagnostics/feed/?format=atom браузеру с поддержкой RSS или http://localhost:8000/diagnostics/feed/?format=rss в ней.

Вы также можете использовать объектную модель WCF Syndication Карты Atom и 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());
}

Настройка, сборка и запуск примера

  1. Убедитесь, что у вас есть право на регистрацию адресов для HTTP и HTTPS на компьютере, как описано в инструкции по настройке в процедуре однократной настройки для примеров Windows Communication Foundation.

  2. Постройте решение.

  3. Запустите консольное приложение.

  4. Пока консольное приложение запущено, перейдите к http://localhost:8000/diagnostics/feed/?format=atom браузеру с поддержкой RSS или http://localhost:8000/diagnostics/feed/?format=rss с помощью нее.

См. также