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


Образец изолированного веб-канала диагностики

В этом примере показано, как создавать канал синдикации RSS/Atom с помощью Windows Communication Foundation (WCF). Это основная программа «Здравствуй, мир», которая демонстрирует основные возможности объектной модели и способы ее настройки для службы 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 обеспечивает удобный программный интерфейс для создания таких конечных точек без особой конфигурации.

WebServiceHost host = new WebServiceHost(typeof(ProcessService), new Uri("https://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. Например, можно просмотреть выходные данные этой службы, перейдя по адресу https://localhost:8000/diagnostics/feed/?format=atom or https://localhost:8000/diagnostics/feed/?format=rss в таком веб-обозревателе с поддержкой RSS, как Internet Explorer 7.

Для чтения синдицированных данных и их обработки с помощью императивного кода также можно использовать Сопоставление объектной модели синдикации WCF моделям Atom и RSS.

XmlReader reader = XmlReader.Create( "https://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. Во время работы консольного приложения перейдите по адресу https://localhost:8000/diagnostics/feed/?format=atom или https://localhost:8000/diagnostics/feed/?format=rss с помощью веб-обозревателя с поддержкой RSS.

Bb410776.Important(ru-ru,VS.100).gif Примечание
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).

<диск_установки>:\WF_WCF_Samples

Если этот каталог не существует, перейдите на страницу Образцы Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF) для .NET Framework 4, чтобы загрузить все образцы Windows Communication Foundation (WCF) и WF. Этот образец расположен в следующем каталоге.

<диск_установки>:\WF_WCF_Samples\WCF\Basic\Syndication\DiagnosticsFeed

См. также

Другие ресурсы

Модель веб-программирования HTTP WCF
Синдикация WCF