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






4.71/5 (46投票s)
本文将帮助您创建 RESTful WCF POST API。我提供了客户端和服务器示例,非常易于理解。
引言
在我上一篇文章中,我尝试解释了如何使用 HTTP Get
方法创建 WCF Restful 服务。 当您发送少量数据作为信息给服务时,这都可以正常工作。但如果您想传输大量数据,HTTP GET
方法不是一个好的选择。在本文中,我们将创建一个 WCF RESTFul POST API。我还会尝试解释为什么以及在哪里使用 POST
方法。
为什么使用 POST 而不是 GET?
当我编写任何 WCF 服务时,我总是使用 POST
。原因是 POST
相对于 GET
的优势。使用 HTTP POST
方法,您可以几乎实现 GET
所能实现的所有功能。尽管如此,使用 POST
也会获得一些额外功能。我们可以说,“GET
”基本上只是用于获取(检索)数据,而“POST
”可能涉及任何操作,例如存储或更新数据、订购产品或发送电子邮件等。
POST
- 使用 application/x-www-form-urlencoded 轻松进行字符编码
- 默认无代理,因此始终从 Web 服务器获取实际数据
- 数据长度可由 Web 服务器限制,而不是由浏览器限制
GET
- 字符编码会减少可用数据量,因为 URL 编码实体(例如,三个日文字符会转换为:%26%2312454%3B%26%2312455%3B%26%2312502%3B)
- 使用
GET
运行 HTTP 请求可能会被您的 Web 浏览器或配置的代理服务器缓存 - Internet Explorer 中的最大 URL 长度为 2,083 个字符(请参阅
MaxClientRequestBuffer
:使用POST
而不是GET
在请求中发送大量数据)
还有更多...
极长的 URL 通常是错误的。大多数流行的 Web 浏览器无法处理超过 2,000 个字符的 URL。通过 URL 发送长信息不是一种好的实现方式,并且它有很多限制,例如 URL 的最大长度、信息格式等等。例如,Internet Explorer 有一个限制为 2083 个字符。URI 旨在可读,而不是用于发送信息。
因此,如果您正在编写任何 REST 服务并且您的信息足够长,最好选择 POST
而不是 GET
方法。
在本文中,我将使用 POST
方法创建 WCF Restful 服务,并使用 HTTP 请求访问它。因此,在这个示例代码中,我们将同时拥有客户端和服务器。我将创建一个接受 HTTP Post
XML 请求并以 XML 格式响应请求数据的服务。
分步指南
第一步
启动 Visual Studio 2010。单击文件 -> 新建 -> 项目。创建一个新的“WCF 服务应用程序”。
第二步
创建项目后,您可以在解决方案中看到默认已创建 WCF 服务和接口文件。删除默认创建的文件,因为我们将创建自己的接口和 WCF 服务文件。
第三步
现在右键单击解决方案并创建一个新的 WCF 服务文件。我将服务文件命名为“RestServiceImpl.svc”。
第四步
我们将创建两个 DataContract
类用于请求和响应。
RequestData
将接收来自客户端的请求,ResponseData
将发送响应。一个非常重要的事情是,服务端的 POST
XML 格式应与 RequestData
相同。因此,post
XML 请求格式可以如下所示:
在 POST
RESTFul 服务中,我们必须为数据合同使用命名空间,这有多种用途,例如反映您代码的当前版本。XML 中 Post
数据时也应使用相同的命名空间。在此,我将 http://www.eysnap.com/mPlayer 作为命名空间,可以更改。
第五步
现在,我们将在 IRestServiceImpl 接口中编写 OperationContract
。下面是代码。
正如我们在上面的代码中看到的,这里的 Request
和 Response
格式是 XML。通过将 WebMessageFormat
从 WebMessageFormat.Xml 更改为 WebMessageFormat.Json,我们也可以将其更改为 JSON。
第六步
在 RestServiceImpl.svc.cs 中实现 Auth OperationContract
。
第 7 步
现在,让我们进入配置部分,这是最后一个部分。配置文件将包含两个基本部分,我们必须理解它们。
服务
行为
这样就完成了。我们的 Restful WCF POST RESTful 服务已准备好进行测试。
服务已准备就绪
我创建了一个 C# 中的测试 WebClient
,它会发送一些 XML 数据的 HTTP 请求。我的应用程序托管在 localhost 上,URL 是 https://:35798/RestServiceImpl.svc/auth。我通过 WebClient
启动并调用了服务。下面是我的 XML 响应,它是正确的。
此服务可以被任何语言的应用程序(.NET、PHP、JAVA 等)使用,这也是在应用程序中使用 REST 服务的主要原因。
希望这篇文章对社区有所帮助。欢迎评论、建议和批评。
谢谢。
历史
- 2011 年 5 月 25 日:初次发布