Compartir a través de


Ejemplo de fuente de diagnósticos independientes

El ejemplo DiagnosticsFeed muestra cómo crear una fuente RSS/Atom para la redifusión con Windows Communication Foundation (WCF). Es un programa "Hola mundo" básico que muestra los fundamentos 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. El código de ejemplo siguiente muestra el contrato utilizado.

[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 operación GetProcesses se anota con el atributo WebGetAttribute, que permite controlar el modo en el que WCF envía las solicitudes HTTP GET de 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 (WebHttpBinding) y un comportamiento del extremo específico (WebHttpBehavior) para funcionar correctamente. La nueva clase WebServiceHost proporciona un API apropiado 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)

También puede utilizar WebServiceHostFactory desde un archivo .svc hospedado en IIS para proporcionar funcionalidad equivalente (esta técnica no está demostrada en este código de ejemplo).

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

Dado que este servicio recibe las solicitudes que utilizan el HTTP GET estándar, puede utilizar cualquier cliente que reconozca RSS o Atom para tener acceso 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 con tecnología RSS.

También puede usar el procedimiento que se explica en Asignación del modelo de objetos de distribución de WCF a Atom y RSS para leer datos redifundidos y procesarlos 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());
}

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

  1. Asegúrese de que tiene el permiso de registro de direcciones adecuado para HTTP y HTTPS en el equipo, como se explica en las instrucciones de configuración que se proporcionan en Procedimiento de instalación única para los ejemplos de Windows Communication Foundation.

  2. Compile la solución.

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

  4. Durante la ejecución de la aplicación de consola, vaya a http://localhost:8000/diagnostics/feed/?format=atom o http://localhost:8000/diagnostics/feed/?format=rss desde un explorador con tecnología RSS.

Consulte también