Welcome

首页 / 软件开发 / WCF / OData 和 AtomPub: 使用WCF数据服务绑定 AtomPub 服务器

OData 和 AtomPub: 使用WCF数据服务绑定 AtomPub 服务器2012-07-29 MSDN Chris Sells如果您不熟悉开放数据协议 (OData),我要告诉您它很美妙。OData(在 odata.org 上有详细介绍)以下列各种基于 HTTP 的功能优势 为基础:用于发布数据的 Atom;用于创建、更新和删除数据的 AtomPub;以及用于定义数据类型的 Microsoft 实体数据模型 (EDM)。

如果您拥有 JavaScript 客户端,则可以采用 JSON 格式(而不是 Atom 格式)直接返回数据;如果您拥有其他客户端(包括 Excel、 .Microsoft NET Framework、PHP、AJAX 等),则可以使用客户端库来形成 OData 请求和处理 OData 响应。如果您在服务器端使用 .NET Framework,则 Microsoft 还提供一个易于使用的库,该库称为 WCF 数据服务,用于公开 Microsoft 实体框架支持的 .NET Framework 类型或数据库作为 OData 源。这样,您就可以采用基于 HTTP 的方式和标准方式,通过 Internet 轻松公开您的数据。

话虽如此,您也可能希望使用 OData 执行一些并不完全属于现成功能的任务,如将 OData 与现有基于 Atom 和 AtomPub 的阅读器和 编写器集成。这正是我们要尝试的功能。

一个简单的博客

例如,假设我要构建一个简单的博客系统(事实上,此工作基于我对 sellsbrothers.com 上的内容管理系统的重新编写)。我对 Visual Studio 2010 中的模型优先支持十分着迷,因此创建了一个 ASP.NET MVC 2.0 项目,添加了一个名为 MyBlogDB.edmx 的 ADO.NET EDM 文件,并设计了一个 Post 实体,如图 1 所示。

图 1 在 Visual Studio 2010 中创建的 Post 实体

博客软件越复杂,需要跟踪的数据越多,但图 1 显示了一些基本数据。右键单击设计器图面时,可以选择“根据模型生成数据库”, 这会显示将创建的 SQL 文件(在本例中为 MyBlogDB.sql)以及将为创建数据库而生成的 SQL。单击“完成”将创建 SQL 文件并将数据库 绑定到我在 EDM 设计器中创建的实体。SQL 的重要部分如图 2 所示。

图 2 使用“根据模型生成数据库”生成的 SQL 代码

...
USE [MyBlogDB];
GO
...
-- Dropping existing tables
IF OBJECT_ID(N"[dbo].[Posts]", "U") IS NOT NULL
DROP TABLE [dbo].[Posts];
GO
...
-- Creating table "Posts"
CREATE TABLE [dbo].[Posts] (
[Id] int IDENTITY(1,1) NOT NULL,
[Title] nvarchar(max) NOT NULL,
[PublishDate] datetime NULL,
[Content] nvarchar(max) NOT NULL
);
GO
...
-- Creating primary key on [Id] in table "Posts"
ALTER TABLE [dbo].[Posts]
ADD CONSTRAINT [PK_Posts]
PRIMARY KEY CLUSTERED ([Id] ASC);
GO