独立诊断源示例
DiagnosticsFeed 示例演示如何创建 RSS/Atom 源以联合 Windows Communication Foundation (WCF)。 它是一个基本的“Hello World”程序,用于显示对象模型的基础知识,以及如何对 Windows Communication Foundation (WCF) 服务设置该模型。
WCF 以服务操作的形式建立联合源的模型,这些服务操作返回一个特殊的数据类型:SyndicationFeedFormatter。 SyndicationFeedFormatter 的实例可以将源序列化为 RSS 2.0 和 Atom 1.0 格式。 下面的示例代码演示所使用的协定。
[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);
}
使用 WebGetAttribute 属性对 GetProcesses
操作进行批注,该属性使你能够控制 WCF 如何向服务操作发出 HTTP GET 请求并指定所发送消息的格式。
如同任何 WCF 服务一样,联合源可以自承载于任何托管应用程序中。 联合服务需要使用特定绑定 (WebHttpBinding) 和特定终结点行为 (WebHttpBehavior) 才能正常运行。 新的 WebServiceHost 类提供了一个方便的 API,用于在不使用特定配置的情况下创建此类终结点。
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)
或者,可在 IIS 承载的 .svc 文件中使用 WebServiceHostFactory 来提供等效的功能(此技术未在此示例代码中演示)。
<% @ServiceHost Language="C#|VB" Debug="true" Service="ProcessService" %>
由于此服务使用标准 HTTP GET 接收请求,因此可以使用任何识别 RSS 或 ATOM 的客户端来访问此服务。 例如,可以通过在可识别 RSS 的浏览器中导航到 http://localhost:8000/diagnostics/feed/?format=atom
或 http://localhost:8000/diagnostics/feed/?format=rss
来查看此服务的输出。
你还可以使用 WCF 联合对象模型如何映射到 Atom 和 RSS 来读取联合数据,并使用命令性代码对其进行处理。
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());
}
设置、生成和运行示例
请确保对计算机上的 HTTP 和 HTTPS 具有正确的地址注册权限,如在 Windows Communication Foundation 示例的一次性安装过程中所述。
生成解决方案。
运行控制台应用程序。
当控制台应用程序正在运行时,使用可识别 RSS 的浏览器导航到
http://localhost:8000/diagnostics/feed/?format=atom
或http://localhost:8000/diagnostics/feed/?format=rss
。