Esempio di feed di diagnostica autonomo
L'esempio DiagnosticsFeed illustra come creare un feed RSS/Atom per la diffusione con Windows Communication Foundation (WCF). Si tratta di un programma "Hello World" di base che illustra le nozioni di base del modello a oggetti e come configurarlo in un servizio Windows Communication Foundation (WCF).
I modelli WCF diffusione di feed come operazioni del servizio che restituiscono un tipo di dati speciale, SyndicationFeedFormatter. Le istanze dell’elemento SyndicationFeedFormatter possono serializzare un feed in entrambi i formati RSS 2.0 e ATOM, 1.0. Nell'esempio di codice seguente viene illustrato il contratto usato.
[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);
}
L'operazione GetProcesses
è annotata con l'attributo WebGetAttribute che consente di controllare come WCF invia richieste HTTP GET alle operazioni di servizio e di specificare il formato dei messaggi inviati.
Come tutti i servizi WCF, i feed di diffusione possono essere indipendenti o ospitati in qualsiasi applicazione gestita. Per funzionare correttamente, i servizi di diffusione richiedono un'associazione specifica (WebHttpBinding) e un comportamento dell'endpoint specifico (WebHttpBehavior). La nuova classe WebServiceHost fornisce una API appropriata per la creazione degli endpoint senza configurazione specifica.
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)
In alternativa, è possibile usare WebServiceHostFactory dall'interno di un file con estensione svc ospitato in IIS per fornire una funzionalità equivalente (questa tecnica non viene dimostrata in questo codice di esempio).
<% @ServiceHost Language="C#|VB" Debug="true" Service="ProcessService" %>
Dato che il servizio riceve richieste usando l’ HTTP GET standard, per accedere al servizio è possibile usare qualsiasi client che supporta il formato RSS o ATOM. Ad esempio, è possibile visualizzare l'output di questo servizio passando a http://localhost:8000/diagnostics/feed/?format=atom
o http://localhost:8000/diagnostics/feed/?format=rss
in un browser compatibile con RSS.
È anche possibile usare In che modo il modello a oggetti di diffusione WCF esegue il mapping ad Atom ed RSS per leggere i dati diffusi ed elaborarli usando il codice 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());
}
Impostare, compilare ed eseguire l'esempio
Assicurarsi di disporre dell'autorizzazione di registrazione dell'indirizzo corretta per HTTP e HTTPS nel computer, come illustrato nelle istruzioni di configurazione in Procedura di installazione monouso per gli esempi di Windows Communication Foundation.
Compilare la soluzione.
Eseguire l'applicazione console.
Mentre l'applicazione console è in esecuzione, passare a
http://localhost:8000/diagnostics/feed/?format=atom
ohttp://localhost:8000/diagnostics/feed/?format=rss
usando un browser compatibile con RSS.