创建 RESTful WCF 服务 API:分步指南






4.86/5 (252投票s)
使用 ASP.NET 和 C# 创建 RESTful WCF 服务 API 的分步指南
引言
Windows Communication Foundation (WCF) 是一个用于在 Windows 上开发和部署服务的 SDK。WCF 为您的服务提供运行时环境,使您可以将 CLR 类型公开为服务,并将其他服务作为 CLR 类型进行使用。在本文中,我将解释如何使用 WCF 4.0 实现 RESTful 服务 API。创建的 API 使用 WCF 属性返回 XML 和 JSON 数据。
什么是 REST?
基于 Roy Fielding 的理论“Representational State Transfer (REST),试图将构成 Web 的架构风格和设计约束进行编码。REST 强调关注点分离、分层、无状态和缓存等,这些在许多分布式体系结构中都很常见,因为它们提供了许多优势。这些优势包括互操作性、独立演进、拦截、提高可伸缩性、效率和整体性能。”
实际上,唯一区别在于客户端如何访问我们的服务。通常,WCF 服务将使用 SOAP,但如果您构建 REST 服务,客户端将以不同的架构风格(如 JSON 的调用、序列化等)访问您的服务。
REST 使用一些常见的 HTTP 方法来插入/删除/更新/检索信息,如下所示:
- GET - 请求资源的特定表示
- PUT - 使用提供的表示创建或更新资源
- DELETE - 删除指定资源
- POST - 提交数据以供已识别的资源处理
为什么要以及在哪里使用 REST?
几天前,我正在编写一个需要被异构语言/平台/系统访问的服务。它可以被 iPhone、Android、Windows Mobile、.NET Web 应用程序、JAVA 或 PHP 使用。使用 Web 服务,要通过统一的系统将其公开给所有人对我来说有点复杂。然后我们决定使用 REST,它很容易被云接纳。这是一个很好的例子,它展示了简单 RESTful 服务的能力 :)。以下几点将帮助您理解为什么使用 RESTful 服务。
- 开销更少(每个调用无需封装 SOAP 信封)
- 重复更少(HTTP 已经表示了
DELETE
、PUT
、GET
等操作,否则这些操作需要在 SOAP 信封中表示)。 - 更标准化 - HTTP 操作易于理解并运行一致。某些 SOAP 实现可能会变得挑剔。
- 更易于人类阅读和测试(仅凭浏览器更难测试 SOAP)。
- 无需使用 XML(嗯,SOAP 也可以不使用,但这样做几乎没有意义,因为你已经在解析信封了)。
- 库(在某种程度上)使 SOAP 变得容易。但正如我指出的,你正在抽象掉很多底层冗余。是的,理论上 SOAP 可以通过其他传输方式来避免在执行类似操作的层之上运行,但实际上,你所做的几乎所有 SOAP 工作都是通过 HTTP 进行的。
分步指南
通常,开发人员会因为很多令人困惑的配置而害怕使用 WCF。我将尝试使用最少的配置,以便我们更容易理解。我们将分 6 个步骤开发RESTful WCS API。现在开始吧。
第一步
首先,启动 Visual Studio 2010。点击文件->新建->项目。创建一个新的“WCF 服务应用程序”。

第二步
创建项目后,您可以在解决方案中看到,默认情况下 WCF 服务和接口文件已创建。删除默认创建的文件,因为我们将创建自己的接口和 WCF 服务文件。
第三步
现在右键单击解决方案,创建一个新的 WCF 服务文件。我将服务文件命名为“RestServiceImpl.svc”。

第四步
正如我在文章开头解释的那样,我们将编写一个可以返回 XML 和 JSON 格式数据的 API,这是该接口。在 IRestServiceImpl
中,添加以下代码:

在上面的代码中,您可以看到 IRestService
的两个不同方法:XMLData
和 JSONData
。XMLData
返回 XML 格式的结果,而 JSONData
返回 JSON 格式的结果。
第五步
打开文件 RestServiceImpl.svc.cs 并在此处编写以下代码:

第六步
现在让我们转到配置部分,这是最后一部分。配置文件将包含两个基本部分,我们必须理解它们。
<services>
这部分包含有关终结点的信息。以下是代码详细信息。
<behaviors>
这部分包含有关服务和终结点行为的详细信息。

就是这样。我们的 RESTful WCF 服务已准备好进行测试。
服务现已准备好进行测试
现在我在浏览器中启动应用程序以查看结果。我在 Internet Explorer 中启动此服务,我的 URL 是 https://:35798/RestServiceImpl.svc。现在,如果我使用 https://:35798/RestServiceImpl.svc/xml/123 URL,我会在浏览器中看到以下响应,这是 XML 格式,而这正是我要实现的任务。

现在,如果我使用 https://:35798/RestServiceImpl.svc/json/123 URL,我会在浏览器中看到以下响应,这是 XML 格式,而这正是我要实现的任务。

希望这篇文章对社区有所帮助。欢迎评论、建议和批评。
历史
- 2010 年 8 月 30 日:初次发布