Partekatu bidez


Ejemplo de fuente de diagnósticos independientes

El ejemplo DiagnosticsFeed muestra cómo crear una fuente RSS/Atom para la distribución con Windows Communication Foundation (WCF). Es un programa básico "Hola mundo" que muestra los conceptos básicos del modelo de objetos y cómo configurarlo en un servicio de Windows Communication Foundation (WCF).

WCF modela las fuentes de redifusión como operaciones de servicio que devuelven un tipo de datos especial, SyndicationFeedFormatter. Las instancias de SyndicationFeedFormatter pueden serializar una fuente en los formatos RSS 2.0 y Atom 1.0. En el código de ejemplo siguiente se muestra el 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);
    }

La GetProcesses operación se anota con el WebGetAttribute atributo que permite controlar cómo WCF envía solicitudes HTTP GET a las operaciones de servicio y especifica el formato de los mensajes enviados.

Como cualquier servicio WCF, las fuentes de redifusión pueden hospedarse en sí mismas en cualquier aplicación administrada. Los servicios de distribución requieren un enlace específico (el WebHttpBinding) y un comportamiento de punto de conexión específico (el WebHttpBehavior) para funcionar correctamente. La nueva WebServiceHost clase proporciona una API cómoda para crear estos puntos de conexión sin una configuración 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, puede usar WebServiceHostFactory desde un archivo .svc hospedado en IIS para proporcionar una funcionalidad equivalente (esta técnica no se muestra en este código de ejemplo).

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

Dado que este servicio recibe solicitudes mediante HTTP GET estándar, puede usar cualquier cliente RSS o compatible con ATOM para acceder al servicio. Por ejemplo, puede ver la salida de este servicio si va a http://localhost:8000/diagnostics/feed/?format=atom o http://localhost:8000/diagnostics/feed/?format=rss en un explorador compatible con RSS.

También puede usar el modo en que el modelo de objetos de distribución de WCF se asigna a Atom y RSS para leer datos sindicados y procesarlos mediante 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());
}

Configuración, compilación y ejecución del ejemplo

  1. Asegúrese de que tiene el permiso correcto para el registro de direcciones de HTTP y HTTPS en el equipo, según se explica en las instrucciones de configuración en One-Time Procedimiento de instalación para los ejemplos de Windows Communication Foundation.

  2. Compile la solución.

  3. Ejecución de la aplicación de consola.

  4. Mientras se ejecuta la aplicación de consola, vaya a http://localhost:8000/diagnostics/feed/?format=atom o http://localhost:8000/diagnostics/feed/?format=rss use un explorador compatible con RSS.

Consulte también