Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O Exemplo DiagnosticsFeed demonstra como criar um feed RSS/Atom com o WCF (Windows Communication Foundation) para distribuição. É um programa "Hello World" básico que mostra as noções básicas do modelo de objeto e como configurá-lo em um serviço do WCF (Windows Communication Foundation).
O WCF modela feeds de sindicalização como operações de serviço que retornam um tipo de dados especial, SyndicationFeedFormatter. 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 WebGetAttribute atributo que permite controlar como o WCF envia solicitações HTTP GET para operações de serviço e especifica o formato das mensagens enviadas.
Como qualquer serviço WCF, os feeds de sindicalização podem ser auto-hospedados em qualquer aplicativo gerenciado. Os serviços de sindicalização exigem uma associaçã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 uma 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 pelo 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 exibir 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 o Como o modelo de objeto de sindicalização do WCF é mapeado para Atom e RSS para ler dados sindicalizados 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
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 One-Time Procedimento de Instalação para os Exemplos do Windows Communication Foundation.
Crie a solução.
Execute o aplicativo de console.
Enquanto o aplicativo de console estiver em execução, navegue até
http://localhost:8000/diagnostics/feed/?format=atomouhttp://localhost:8000/diagnostics/feed/?format=rssusando um navegador com reconhecimento de RSS.