联合 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 实现会忽略秒的小数部分。
对象模型
内容发布的对象模型由以下表中的类群组成。
格式设置类:
班级 | DESCRIPTION |
---|---|
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 格式的类。 |
对象模型类:
班级 | DESCRIPTION |
---|---|
SyndicationCategory | 一个表示联合源类别的类。 |
SyndicationContent | 一个表示联合内容的基类。 |
SyndicationElementExtension | 一个表示联合元素扩展的类。 |
SyndicationElementExtensionCollection | SyndicationElementExtension 对象的集合。 |
SyndicationFeed | 一个表示顶级源对象的类。 |
SyndicationItem | 一个表示源项的类。 |
SyndicationLink | 一个表示联合源或联合项中的链接的类。 |
SyndicationPerson | 一个表示 Atom Person 构造的类。 |
SyndicationVersions | 一个表示所支持的联合协议版本的类。 |
TextSyndicationContent | 一个类,表示要向最终用户显示的任何 SyndicationItem 内容。 |
TextSyndicationContentKind | 一个表示所支持的不同文本联合内容类型的枚举。 |
UrlSyndicationContent | 一个表示包含指向另一资源的 URL 的联合内容的类。 |
XmlSyndicationContent | 一个表示不显示在浏览器中的联合内容的类。 |
对象模型中的核心数据抽象是源和项,它们分别对应于 SyndicationFeed 和 SyndicationItem 类。 源会公开一些源级别的元数据(例如,标题、说明和作者)、一个存储未知扩展的位置以及组成源的其余信息内容的一组项。 项目提供一些项目级别的元数据(例如标题、摘要和发布日期)、用于存储未知扩展的位置,以及包含项目信息内容其余部分的内容元素。 源和项这两个核心抽象由表示 Atom 1.0 和 RSS 规范中引用的常见数据构造的其他类提供支持。
Feed 实例中携带的信息可以转换为各种 XML 格式。 转换到 XML 和从 XML 转换的过程由 SyndicationFeedFormatter 类管理。 此类是抽象的;具体实现适用于 Atom 1.0 和 RSS 2.0, Atom10FeedFormatter 以及 Rss20FeedFormatter。 若要使用派生的Feed类,请使用任 Atom10FeedFormatter<TSyndicationFeed> 或 Rss20FeedFormatter<TSyndicationFeed>,因为它们允许您指定一个派生的Feed类。 要使用派生项类,可以使用 Atom10ItemFormatter<TSyndicationItem> 或 Rss20ItemFormatter<TSyndicationItem>,因为它们允许您指定派生项类。第三方可以派生其自己的 SyndicationFeedFormatter 实现,以支持不同的联合格式。
可扩展性
- 联合协议的关键功能是扩展性。 Atom 1.0 和 RSS 2.0 都允许在聚合源中添加规范中未定义的属性和元素。 WCF 联合编程模型提供了两种使用自定义属性和扩展的方法:派生新类和松散类型访问。 有关详细信息,请参阅联合扩展性。