新的整合 API
请想象一个 RSS 源。如果您和我一样,就会立即想到新闻源或博客。整合(RSS 和 ATOM 是整合格式)能够表达的不止是这些。简单地说,整合的内容就是表达一组数据的方式。这组数据实际上可以是任何内容:悉尼方圆 50 英里范围内居住的袋熊的数量、最近 10 张超过 100 美元的采购单,或是 Contoso 上个月生产的回飞棒的数量。
.NET Framework 3.5 充分支持整合内容的创建和使用。它支持 RSS 2.0 和 ATOM 1.0 格式的创建及使用、支持添加整合扩展的各种方式,甚至还支持实现其他格式的功能。编程模型避免了开发人员直接处理整合格式细节,从而使其易于使用。
在 3.5 版之前,.NET Framework 一直没有一种标准的方式来创建或使用整合的内容。虽然新的整合功能由 WCF 小组编写,但它并不依赖于 WCF。事实上,所有与整合相关的类型都是 System.Syndication 命名空间的一部分,虽然它们位于 System.ServiceModel.Web.dll 程序集中。您可以从任何承载了 AppDomain(ASP.NET、WPF 应用程序、NT 服务等)的进程使用 .NET Framework 3.5 的整合功能。这个功能意味着您可以通过任何传输(而不仅仅是 HTTP)提供或使用整合的内容。然而,当与 WCF 中的 HTTP 编程模型结合后,也可以将整合添加到现有的 SOAP/WS-* 服务中。
新的整合 API 包含了一些类型,它们可以抽象单独的整合源及其中的项目,还有一些类型可以将该源转换为特定的格式。System.Syndication.SyndicationFeed 类型是整合源的一种中立格式的表现形式。SyndicationFeed 包含一系列 SyndicationItem 对象。不含一组 SyndicationItem 对象的 SyndicationFeed 就像是一个没有豌豆的豆荚,因为 SyndicationItem 对象就是源中项目的表现形式。
用一组 SyndicationItem 对象填充 SyndicationFeed 后,SyndicationFeedFormatter<T> 可以将该源转换成特定的格式。SyndicationFeedFormatter<T> 可派生出两种类型:Rss20FeedFormatter 和 Atom10FeedFormatter。顾名思义,这些类型可以将 SyndicationFeed 的实例分别转换为 RSS 2.0 和 ATOM 1.0 格式。
创建 SyndicationFeed
创建 SyndicationFeed 对象的方法有两种。您可以实例化对象并手动填充其成员,或者也可以从现有的源来填充整个 SyndicationFeed。这两种方法都非常简单,同时还可以避免开发人员直接处理特定传输格式的琐碎细节。下面的代码演示了如何手动构建 SyndicationFeed 对象。
SyndicationFeed feed = new SyndicationFeed();
feed.Title.Text = "The Cybertopian Chronicle";
feed.Title.Text = "The Cybertopian Chronicle";
Title 仅仅是众多可以设置的属性之一,因此请查看文档以便了解其他可以设置的属性。
很多情况下,您想要读取一个现有的源,并根据该源的内容做一些事情。在新的整合 API 中,您可以实例化一个 SyndicationFeed,并自动从现有的源对其状态进行填充。这时,您只需要一个现有源的 URI,或是一个准备好读取源的 XmlReader。下面的代码显示了如何连接到 Web 上的一个现有源,并从中提取信息:
Uri feedUri = new Uri("http://blogs.msdn.com/justinjsmith/atom.xml");
SyndicationFeed feed = SyndicationFeed.Load(feedUri);
Console.WriteLine(feed.Title.Text);
// outputs "The Cybertopian Chronicle"
SyndicationFeed feed = SyndicationFeed.Load(feedUri);
Console.WriteLine(feed.Title.Text);
// outputs "The Cybertopian Chronicle"