通过HTTP协议标准动作消费REST WCF 服务
前几节介绍了REST WCF 服务的一些基本的特点,本节说明一下,如何基于HTTP的标准动作来使用REST WCF 服务。由于RESTful服务的架构风格基于HTTP协议,并且其设计原则中明确指出:通过通用的连接器接口来使用资源。对于REST架构风格的服务,主要通过它8个动作中的4个来使用资源,即:GET,POST,PUT,DELETE。
在RESTful 服务中,GET,POST,PUT,DELETE的标准操作如下:
GET:获取资源
POST:修改资源
PUT:创建资源
DELETE:删除资源
本节涉及的要点如下:
1、如何定义接口规范,使客户端通过能通过HTTP协议的标准动作来使用REST WCF资源。
2、客户端如何通过HTTP标准动作使用使用资源
首先介绍一下开发环境:
VS2008 SP1。由于是基于Framework3.5的平台,所以本节介绍的只是REST WCF 3.5的一些特点。Ddmo结构图:
1、接口规范的定义:
对REST 架构风格有一些了解的同学都知道,在System.ServiceModel.Web程序集中,微软为我们提供了两个特性:WebGetAttribute、WebInvokeAttribute.
前几节也做过一个简要的介绍,WebGetAttribute通过名称可以得知,它是用来获取资源的,所以它使用的HTTP动作是GET。在REST WCF中,其他的几个动作都是在WebInvokeAttribute中定义的。
REST WCF中,就是通过在WebGetAttribute与WebInvokeAttribute中,通过UriTemplate属性定义了资源的使用方式。另外还可以通过RequestFormat、ResponseFormat定义客户端请求时使用的数据格式以及服务端返回给客户端的数据格式。
在本例中,通过服务契约定义来定义接口规范以及客户端的使用规范。如下图示:
注:UriTemplate中类似Student/{name}中的{name}即为所定义方法中所需参数的占位符。
2、客户端使用REST WCF 。
2.1使用HTTP GET 动作获取资源:
1 2 | string getMsg = client.DownloadString( "http://localhost:6012/Student.svc/Student/zhangRest" ); Console.WriteLine( string .Format( "get方法获取到的学生信息:{0}" , getMsg)); |
2.2使用HTTP POST 动作修改资源:
1 2 3 | string postMsg = client.UploadString( "http://localhost:6012/Student.svc/Student/lizhi/0105245687" , "POST" , string .Empty); Console.WriteLine( string .Format( "post方法修改到的学生信息:{0}" , postMsg)); |
2.3使用HTTP DELETE 动作删除资源:
1 2 | string deleteMsg = client.UploadString( "http://localhost:6012/Student.svc/Student/zhangRest" , "DELETE" , string .Empty); Console.WriteLine( string .Format( "delete方法删除到的学生信息:{0}" , deleteMsg)); |
2.4使用HTTP PUT动作添加资源:
1 2 | string addMsg = client.UploadString( "http://localhost:6012/Student.svc/Student/zhangsan/0102356897" , "PUT" , string .Empty); Console.WriteLine( string .Format( "put方法添加的学生信息:{0}" , addMsg)); |
四种动作的使用方式如上所示。
在REST WCF中,URI(Uniform Resources Identifier)就是在服务契约中定义通过UriTemplate定义的,而不像在SOA架构下的服务中直接使用方法名。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构