使用 RESTful WCF 服务和 JavaScript 实现 CRUD 操作






4.87/5 (24投票s)
通过 JQuery 轻松消耗 WCF REST 服务并执行 CRUD(创建、
引言
Windows Communication Foundation (WCF) 数据服务以 RESTful 的方式公开数据层,并为 AJAX 应用程序和其他客户端应用程序提供了一种非常简单的方式来访问数据,而无需编写完整的 Web 服务。这引起了我对 WCF 的兴趣。通过这篇博文,我们将看到一种利用 Entity Framework 和 WCF 数据服务以最小的努力执行 CRUD 操作的方法。
REST 基础知识
Representational state transfer (REST) 是一种分布式超媒体系统(如万维网)的软件架构风格。REST 的酷之处在于它不绑定到任何特定的技术或平台。该术语通常被更广泛地用于描述任何简单的接口,该接口通过 HTTP 传输特定于域的数据,而无需像 SOAP 这样的附加消息层或通过 HTTP cookie 进行会话跟踪。RESTful Web 服务是使用 HTTP 和 REST 原理实现的简单 Web 服务。这样的 Web 服务可以被看作是一组资源。Web 服务支持数据的 MIME 类型。这通常是 JSON、XML 或 YAML,但可以是任何东西。Web 服务使用 HTTP 方法(例如 POST
、GET
、PUT
或 DELETE
)支持一系列操作。
WCF REST 服务
WCF REST 服务是普通的 WCF 服务,增加了功能,使其能够以 RESTful 的方式被消费(URI vs URL,HTTP 动词的使用,不同数据传输格式(如 JSON、YAML 等)的使用)。下表将帮助您了解 HTTP 动词通常如何用于实现 Web 服务。
方法 | 描述 |
---|---|
GET |
请求资源的特定表示 |
PUT |
使用提供的表示创建或更新资源 |
删除 |
删除指定的资源 |
POST |
将数据提交给已标识的资源进行处理 |
HEAD |
类似于 GET ,但仅检索标头而不检索正文 |
OPTIONS |
返回已标识的资源支持的方法 |
配置 WCF 服务
是时候配置 WCF 数据服务了。虽然此示例需要 Entity Framework 4,但我认为配置 Entity Framework 超出了本文的范围。所以我们将只专注于配置 WCF 数据服务。在“解决方案资源管理器”中,右键单击您的 ASP.NET 项目名称,然后单击“添加新项”。在“添加新项”对话框中,选择“WCF 数据服务”。

对于服务名称,我选择了EFService.svc。Visual Studio 将显示一些生成的代码。您需要在 WCF 数据服务的定义中添加您的 Entity Framework 数据上下文的名称,对于这个特定的示例,我使用 SocialShareDatabaseContext
,如下所示:
public class EFService : DataService<SocialShareDatabaseContext>
使用 Visual Studio 开发服务器测试服务,该服务应类似于https://:[port]/EFService.svc/Members //获取所有成员。如果您打开附加示例项目中的EFService.svc.cs,您将看到以下代码:

另外,在web.config文件的底部,您将看到两个自动添加的部分:一个是:<system.webServer>
,另一个是<system.serviceModel>
,如下所示:

从客户端使用 WCF REST 服务
WCF 数据服务使您能够以 XML 格式提供对实体数据的动态访问,这些数据可供应用程序使用。您可以从 WCF REST 服务返回 XML(默认)或 JSON。有几种方法可以从客户端使用 REST 服务,但作为 JQuery 的粉丝,我将坚持使用它。在深入之前,JQuery 的 ajax 调用需要一些我们首先需要了解的参数:type:要调用的 REST 方法的类型,即POST
/GET
/PUT
/DELETE
。
url
:WCF 服务 URL,通过 URL 加上方法名称/实体名称附加在 URL 的额外路径中进行调用data
:可选参数,如果调用方法/实体需要参数,则需要。contentType
:将数据发送到服务器时,使用此 content-typedataType
:返回的数据类型,即 XML、JSON 等。success
:如果请求成功,将调用的函数,REST 服务将返回 JSON/XMLerror
:如果请求失败,将调用的函数
现在我们将看到如何使用不同的 REST 方法调用 WCF 服务。
使用 GET 方法
列出集合的 URI 和可能的其他详细信息。在我们的例子中,请求成员集合。
$.ajax({
type: "GET",
url: "Services/EFService.svc/Members",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
// Play with returned data in JSON format
},
error: function (msg) {
alert(msg);
}
});
使用 POST 方法
检索集合中已寻址成员的表示,在下面的示例中,创建一个新的条目到集合中。
$.ajax({
type: "POST",
url: "Services/EFService.svc/Members/",
data: "{Email:'test@test.com', ScreenName:'TestUser'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
// Play with response returned in JSON format
},
error: function (msg) {
alert(msg);
}
});
使用 PUT 方法
用另一个集合更新整个集合,在下面的示例中,更新集合中已寻址的成员。
$.ajax({
type: "PUT",
url: "Services/EFService.svc/Members/",
data: "{Email:'test@test.com', ScreenName:'TestUser'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
// Play with response returned in JSON format
},
error: function (msg) {
alert(msg);
}
});
使用 DELETE 方法
删除整个集合或特定集合,在下面的示例中,删除id=1
的Member
。
$.ajax({
type: "DELETE",
url: "Services/EFService.svc/Members(1)",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
// Play with response returned in JSON format
},
error: function (msg) {
alert(msg);
}
});
使用示例代码
使用附加的示例代码需要
- 已安装 Service Pack 1 的 VS2010
- Microsoft SqlServer 2005 或更高版本
- 对 Entity Framework 4.0 的基本理解
配置您的环境
- 附加sample.mdf和sample.ldf
- 想要使用 sqlserver 2005 的用户,请从顶部下载DbSchema-SQLServer2005.zip并解压。创建一个名为 sample 的数据库并运行解压后的 SQL 脚本
- 打开web.config并找到
connectionStrings
部分,并根据您的本地 SQL Server 登录凭据编辑连接字符串
为了方便显示表格数据,我使用了 JQuery 模板插件来渲染集合。运行default.aspx页面以查看示例。
历史
- 版本 1.0:基本版本已更新
- 版本 1.1:已附加 Microsoft SqlServer 2005 的数据库架构