Amostra de alimentação de diagnóstico independente

O exemplo DiagnosticsFeed demonstra como criar um feed RSS/Atom para distribuição com o Windows Communication Foundation (WCF). É um programa básico "Hello World" que mostra os conceitos básicos do modelo de objeto e como configurá-lo em um serviço Windows Communication Foundation (WCF).

O WCF modela feeds de distribuição como operações de serviço que retornam um tipo de dados especial, SyndicationFeedFormatter. As instâncias de SyndicationFeedFormatter podem serializar um feed nos formatos RSS 2.0 e Atom 1.0. O código de exemplo a seguir mostra o contrato usado.

[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);
    }

A GetProcesses operação é anotada com o atributo que permite controlar como o WebGetAttribute WCF despacha solicitações HTTP GET para operações de serviço e especificar o formato das mensagens enviadas.

Como qualquer serviço WCF, os feeds de distribuição podem ser auto-hospedados em qualquer aplicativo gerenciado. Os serviços de distribuição exigem uma ligação específica (o WebHttpBinding) e um comportamento de ponto de extremidade específico (o WebHttpBehavior) para funcionar corretamente. A nova WebServiceHost classe fornece uma API conveniente para criar esses pontos de extremidade sem configuração específica.

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)

Como alternativa, você pode usar WebServiceHostFactory de dentro de um arquivo .svc hospedado no IIS para fornecer funcionalidade equivalente (essa técnica não é demonstrada neste código de exemplo).

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

Como esse serviço recebe solicitações usando o HTTP GET padrão, você pode usar qualquer cliente com reconhecimento de RSS ou ATOM para acessar o serviço. Por exemplo, você pode visualizar a saída desse serviço navegando para http://localhost:8000/diagnostics/feed/?format=atom ou http://localhost:8000/diagnostics/feed/?format=rss em um navegador com reconhecimento de RSS.

Você também pode usar How the WCF Syndication Object Model Maps to Atom e RSS para ler dados sindicados e processá-los usando código imperativo.

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());
}

Configurar, compilar e executar o exemplo

  1. Verifique se você tem a permissão de registro de endereço correta para HTTP e HTTPS no computador, conforme explicado nas instruções de configuração em Procedimento de instalação única para os exemplos do Windows Communication Foundation.

  2. Compile a solução.

  3. Execute a aplicação de consola.

  4. Enquanto o aplicativo de console estiver em execução, navegue até http://localhost:8000/diagnostics/feed/?format=atom ou http://localhost:8000/diagnostics/feed/?format=rss usando um navegador com reconhecimento de RSS.

Consulte também