WCF实现RESTFul Web Service
共同学习了前面一些概念,终于开始正题了哈。RESTful的Web Service调用直观,返回的内容容易解析。这里先会描述一个简单的场景--Web Service提供一个方法来搜索个人信息,传入人名,返回完整个人信息。
下面我们一步步用WCF实现一个RESTful的Web Service。在这之后分别描述用普通Console程序host在本地,以及用IIS发布到网络。
1. Contract
namespace WcfRESTful{ [ServiceContract] public interface IPersonRetriever { [OperationContract] [WebGet(UriTemplate = "Persons/{name}", ResponseFormat = WebMessageFormat.Json)] Person GetPerson(string name); } [DataContract] public class Person { [DataMember] public string Name { get; set; } [DataMember] public int Age { get; set; } [DataMember] public DateTime Birthday { get; set; } }}
这里需要注意的是在方法GetPerson()上面的WebGetAttribute:
1.1 WebGetAttribute定义了该方法的访问方式为RESTful的Get(关于RESTful可以参考本小博中关于REST介绍的文章)。
1.2 UriTemplet描述了URL匹配的格式,当格式匹配时,{name}位置的字符串会被对应传入为方法参数。
1.3 ResponseFormat指定了返回的数据格式,可选项为JSON和XML。
2. Contract实现
namespace WcfRESTful{ public class PersonRetriever : IPersonRetriever { public Person GetPerson(string name) { WebOperationContext.Current.OutgoingResponse.ContentType = "text/plain"; return new Person { Name = name, Age = 22, Birthday = DateTime.Now }; } }}
这个实现里面,我们简单的返回一个用传入名参数为name的Person实例。这里补充一点:如果ContectType是"Text",如果返回结果串包含特别字符(比如转义,双引号,XML文件片段等),有些情况会在IE中解析不正常,造成字段缺失,目前没有找到相关资料说明IE解析规则。为了方便和谨慎起见,直接用"text/plain"。
3. 在Console中Host Service
在第1,2步的基础上,我们开始在console中host这个service。
namespace WcfRESTful{ class Program { static void Main(string[] args) { Uri baseAddress = new Uri("http://127.0.0.1:9998/PersonRetriever"); using (ServiceHost host = new ServiceHost(typeof(PersonRetriever), baseAddress)) { WebHttpBinding binding = new WebHttpBinding(); ServiceEndpoint endpoint = host.AddServiceEndpoint(typeof(IPersonRetriever), binding, baseAddress); WebHttpBehavior httpBehavior = new WebHttpBehavior(); endpoint.Behaviors.Add(httpBehavior); host.Opened += delegate { Console.WriteLine("Hosted successfully."); }; host.Open(); Console.ReadLine(); } } }}
让后我们通过URL:http://127.0.0.1:9998/PersonRetriever/Persons/Tom 就可以访问该Service了,其中"Tom"是需要查询的人名。在IE中输入该URL,回车之后的结果如下图:
4. 在IIS中Host Web Service
4.1新建一个WCF Service(或者Web Service依.Net Framework版本不同而定)工程,把第1,2步的Contract和实现Copy到App_Code文件夹下面。
4.2修改Service.svc - 注意,Factory="System.ServiceModel.Activation.WebServiceHostFactory"必须添加才可以直接在IE查看结果,但是Matedata将被屏蔽不能显示。
<%@ ServiceHost Language="C#" Debug="true" Service="WcfRESTful.PersonRetriever" CodeBehind="~/App_Code/PersonRetriever.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory"%>
4.3添加Endpoint到Web.config
<system.serviceModel> <services> <service name="WcfRESTful.PersonRetriever" behaviorConfiguration="ServiceBehavior"> <endpoint binding="webHttpBinding" contract="WcfRESTful.IPersonRetriever"/> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> </service> </services> <behaviors> <serviceBehaviors> <behavior name="ServiceBehavior"> <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> <serviceMetadata httpGetEnabled="true"/> <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> <serviceDebug includeExceptionDetailInFaults="true"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel>
4.4添加工程目录到IIS虚拟路径,命名为WCFTest。
以上4.1-4.4的所有步骤都完成了,我们通过URL:http://16X.19X.18X.6X/wcftest/Service.svc/Persons/Tom 一样可以得到上面的结果{"Age":22,"Birthday":"\/Date(1329226087212-0500)\/","Name":"Tom"}。
这里需要补充一点,在4.1步骤,我们新建一个Web Service工程,仅仅是为了少写一些Web.Config的配置(会默认有system.web,complier等配置信息),其实我们完全可以新建App_Code文件夹,把Contact和Contract实现拷入该文件夹,然后在外层手工新建Service.svc,Web.config并写入相应配内容,一样可以成功部署和使用。
5. 总结
RESTful Web Service用更简单通用的协议(HTTP,少了SOAP这一道封装和解析),更直接的结果,让人眼前一亮,在资源不需要交互逻辑和复杂结构的情况下还是不错的选择。
http://www.cnblogs.com/KeithWang/archive/2012/02/14/2351826.html
WCF实现RESTFul Web Service相关推荐
- WCF实现RESTFul Web Service(三):RESTful WebService VS SOAP WebService
SOAP SOAP最早是针对RPC的一种解决方案,简单对象访问协议,很轻量,同时作为应用协议可以基于多种传输协议来传递消息(Http,SMTP等).但是随着SOAP作为WebService的广泛应用, ...
- Java RESTful Web Service实战
编者按: InfoQ开设栏目"品味书香",精选技术书籍的精彩章节,以及分享看完书留下的思考和收获,欢迎大家关注.本文节选自韩陆著<Java RESTful Web Servi ...
- 【转】Spring 4.x实现Restful web service
http://my.oschina.net/yuyidi/blog/352909 首先我们还是跟之前一样,创建一个maven项目,不过因为Spring Restful web service是基于Sp ...
- 使用JAX-RS创建RESTful Web Service
guice resteasy http://www.cnblogs.com/ydxblog/p/7891224.html http://blog.csdn.net/withiter/article/d ...
- JAX-RS 方式的 RESTful Web Service 开发
2019独角兽企业重金招聘Python工程师标准>>> Web Service 目前在风格上有两大类,一个是基于 SOAP 协议,一个是完全遵循 HTTP 协议规范的RESTful ...
- spring3创建RESTFul Web Service
spring 3支持创建RESTFul Web Service,使用起来非常简单.不外乎一个@ResponseBody的问题. 例如:后台controller: 做一个JSP页面,使用ajax获取数据 ...
- Apache CXF实现Web Service(3)——Tomcat容器和不借助Spring的普通Servlet实现JAX-RS(RESTful) web service...
起步 参照这一系列的另外一篇文章: Apache CXF实现Web Service(2)--不借助重量级Web容器和Spring实现一个纯的JAX-RS(RESTful) web service 首先 ...
- 关于Restful Web Service的一些理解
对于restful web service,刚开始确实是个不太好理解的概念. 看了些文章,总是在描述和解释restful的原则: 1)显式地使用HTTP方法. 2)无状态. 3)公开目录结构式的 UR ...
- java 创建restful_使用Java创建RESTful Web Service
[RESTful Web Service是轻量级的service,可以通过HTTP的方式来实现对后台数据库的CRUD,在Web开发和移动开发时使用的比较广泛,非常方便.在Java世界里, JAX-RS ...
最新文章
- python线程执行带有参数的任务(args、kwargs)
- 如何连接mongodb数据库,并且从中查找数据
- 10年卖下28家AI公司 苹果的AI吸星大法!
- vue + element ui 的后台管理系统框架_从零开始搭建 VUE + Element UI后台管理系统框架...
- 一个虐你千百遍的问题:“RPC好,还是RESTful好?”
- C#开发笔记之13-如何用C#分隔字符串并返回字符串数组?
- 【Unity与23种设计模式】访问者模式(Visitor)
- 计算机由简单的二进制阴阳,二进制之美,大道至简,二生万物!
- 如何写出高性能的SQL语句,及如何进行SQL性能分析与调优
- gateway nacos注册服务_使用Nacos作为微服务注册中心和配置中心
- 如何在Node.js上的Express.js中获取GET(查询字符串)变量?
- SQL拼接自己需要的字符串
- vbox NAT 设置端口映射(NAT+8080端口转发)
- 320240带中文字库液晶显示屏
- 物联网之有线通信技术之短距离的现场总线
- Python+Kivy(App开发)从入门到实践
- 搞事课堂 C++格式化硬盘
- 既然android service是运行在主线程中的,那service还有什么用?
- 普通人利用寒假一个月可以学会的四个赚钱技能
- 2、Linux命令合集
热门文章
- matlab画多个垂直的线段,新手求助,图形最后多出一条垂直线
- 5单个编译总会编译全部_玩转Android10(五)源码编译开发中常用命令
- c语言simpson积分计算方法,数值分析复化Simpson积分公式和复化梯形积分公式计算积分的通用程序...
- python html解析查找字符串_用python的BeautifulSoup分析html
- 2 OC 对象的本质(一个Student 占用的内存大小)
- SpringBoot b2b2c 多用户商城系统(十五)Springboot整合RabbitMQ...
- [转]web打印实现方案 Lodop6.034 使用方法总结
- MySQL RR隔离级别的更新冲突策略
- 那些进入 Alexa 排名前 250 的 WordPress 网站
- oracle--with as