联合体系结构
联合 API 是专为提供不限制格式编程模型而设计的,该编程模型允许将各种格式的联合内容写入网络中。 抽象数据模型由以下类组成:
这些类严格地映射到 Atom 1.0 规范中定义的构造,但有一些名称会不相同。
在 Windows Communication Foundation (WCF) 中,联合源被建模为另一种类型的服务操作,其中返回的类型是 SyndicationFeedFormatter 的派生类之一。 源的检索建模为请求-响应消息交换。 客户端向服务发送请求,而服务进行响应。 请求消息是通过基础结构协议(例如,原始 HTTP)设置的,而响应消息包含由通常可以理解的联合格式(RSS 2.0 或 Atom 1.0)组成的负载。 实现这些消息交换的服务称为联合服务。
联合服务的协定包含一组操作,这些操作返回 SyndicationFeedFormatter 类的实例。 下面的示例演示联合服务的接口声明。
[ServiceContract]
[ServiceKnownType(typeof(Atom10FeedFormatter))]
[ServiceKnownType(typeof(Rss20FeedFormatter))]
public interface IBlog
{
[OperationContract]
[WebGet(UriTemplate="GetBlog?format={format}", BodyStyle=WebMessageBodyStyle.Bare)]
SyndicationFeedFormatter GetBlog(string format);
}
联合支持在 WCF REST 编程模型的基础上生成,该模型定义了 WebHttpBinding 绑定,该绑定与 WebHttpBehavior 一起用于将源作为服务提供。 有关 WCF REST 编程模型的详细信息,请参阅 WCF Web HTTP 编程模型概述。
注意
Atom 1.0 规范允许在其任何日期构造中指定秒的小数部分。 在序列化和反序列化时,WCF 实现会忽略秒的小数部分。
对象模型
联合的对象模型由下表中多个组中的类组成。
格式设置类:
类 | 说明 |
---|---|
Atom10FeedFormatter | 用于将 SyndicationFeed 实例序列化为 Atom 1.0 格式的类。 |
Atom10FeedFormatter<TSyndicationFeed> | 用于将 SyndicationFeed 派生类序列化为 Atom 1.0 格式的类。 |
Atom10ItemFormatter | 用于将 SyndicationItem 实例序列化为 Atom 1.0 格式的类。 |
Atom10ItemFormatter<TSyndicationItem> | 用于将 SyndicationItem 派生类序列化为 Atom 1.0 格式的类。 |
Rss20FeedFormatter | 用于将 SyndicationFeed 实例序列化为 RSS 2.0 格式的类。 |
Rss20FeedFormatter<TSyndicationFeed> | 用于将 SyndicationFeed 派生类序列化为 RSS 2.0 格式的类。 |
Rss20ItemFormatter | 用于将 SyndicationItem 实例序列化为 RSS 2.0 格式的类。 |
Rss20ItemFormatter<TSyndicationItem> | 用于将 SyndicationItem 派生类序列化为 RSS 2.0 格式的类。 |
对象模型类:
类 | 说明 |
---|---|
SyndicationCategory | 一个表示联合源类别的类。 |
SyndicationContent | 一个表示联合内容的基类。 |
SyndicationElementExtension | 一个表示联合元素扩展的类。 |
SyndicationElementExtensionCollection | SyndicationElementExtension 对象的集合。 |
SyndicationFeed | 一个表示顶级源对象的类。 |
SyndicationItem | 一个表示源项的类。 |
SyndicationLink | 一个表示联合源或联合项中的链接的类。 |
SyndicationPerson | 一个表示 Atom Person 构造的类。 |
SyndicationVersions | 一个表示所支持的联合协议版本的类。 |
TextSyndicationContent | 一个表示要显示给最终用户的任何 SyndicationItem 内容的类。 |
TextSyndicationContentKind | 一个表示所支持的不同文本联合内容类型的枚举。 |
UrlSyndicationContent | 一个表示包含指向另一资源的 URL 的联合内容的类。 |
XmlSyndicationContent | 一个表示不显示在浏览器中的联合内容的类。 |
对象模型中的核心数据抽象是源和项,它们分别对应于 SyndicationFeed 和 SyndicationItem 类。 源会公开一些源级别的元数据(例如,标题、说明和作者)、一个存储未知扩展的位置以及组成源的其余信息内容的一组项。 项可以提供一些项级别的元数据(例如,标题、摘要和发布日期)、一个存储未知扩展的位置以及一个包含项的其余信息内容的内容元素。 源和项这两个核心抽象由表示 Atom 1.0 和 RSS 规范中引用的常见数据构造的其他类提供支持。
源实例中携带的信息可以转换成各种 XML 格式。 与 XML 的来回转换过程由 SyndicationFeedFormatter 类管理。 此类是一个抽象类;为 Atom 1.0 和 RSS 2.0 提供的具体实现分别为 Atom10FeedFormatter 和 Rss20FeedFormatter。 若要使用派生源类,应使用 Atom10FeedFormatter<TSyndicationFeed> 或 Rss20FeedFormatter<TSyndicationFeed>,您可以通过它们指定派生源类。 若要使用派生项类,应使用 Atom10ItemFormatter<TSyndicationItem> 或 Rss20ItemFormatter<TSyndicationItem>,您可以通过它们指定派生项类。第三方可以派生各自的 SyndicationFeedFormatter 实现以支持不同的联合格式。
扩展性
- 联合协议的一个主要功能是扩展性。 Atom 1.0 和 RSS 2.0 都允许您向联合源中添加规范中没有定义的属性和元素。 WCF 联合编程模型提供了两种处理自定义属性和扩展的方法:派生新类和松散类型访问。 有关详细信息,请参阅联合扩展性。