构建RESTful风格的WCF服务
RESTful Wcf是一种基于Http协议的服务架构风格。 相较 WCF、WebService 使用 SOAP、WSDL、WS-* 而言,几乎所有的语言和网络平台都支持 HTTP 请求。
RESTful的几点好处:
1、简单的数据通讯方式,基于HTTP协议。避免了使用复杂的数据通讯方式。
2、避免了复杂的客户端代理。
3、直接通过URI资源定向即可把服务暴露给调用者。
下面使用一个简单的demo项目来看看啥是RESTful Wcf。
1、项目结构【VS2010+.net 4.0】:
2、接口定义:定义了2个方法,分别代表GET、POST典型请求方式。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.ServiceModel; 6 using System.ServiceModel.Web; 7 using MyWcfService.Model; 8 namespace MyWcfService 9 { 10 [ServiceContract(Namespace = ServiceEnvironment.ServiceNamespace, Name = "user")] 11 public interface IUserService 12 { 13 /// <summary> 14 /// 根据code获取对象(GET请求处理) 15 /// </summary> 16 /// <param name="code"></param> 17 /// <returns></returns> 18 [OperationContract] 19 [WebGet(UriTemplate = "search/{code}", ResponseFormat = ServiceEnvironment.WebResponseFormat, RequestFormat = ServiceEnvironment.WebRequestFormat, BodyStyle = ServiceEnvironment.WebBodyStyle)] 20 UserInfo GetUserInfoSingle(string code); 21 22 /// <summary> 23 /// 注册新的用户(POST请求处理) 24 /// </summary> 25 /// <param name="user">注册用户信息</param> 26 /// <returns>注册成功返回注册用户基本信息</returns> 27 [OperationContract] 28 [WebInvoke(Method = "POST", UriTemplate = "register", ResponseFormat = ServiceEnvironment.WebResponseFormat, RequestFormat = ServiceEnvironment.WebRequestFormat, BodyStyle = ServiceEnvironment.WebBodyStyle)] 29 UserInfo Register(UserInfo user); 30 } 31 }
3、服务实现类WcfUserService:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Runtime.Serialization; 5 using System.ServiceModel; 6 using System.ServiceModel.Web; 7 using System.Text; 8 using MyWcfService.Model; 9 using System.ServiceModel.Activation; 10 11 namespace MyWcfService 12 { 13 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 14 public class WcfUserService : IUserService 15 {18 public UserInfo GetUserInfoSingle(string code) 19 { 20 // var request= WebOperationContext.Current.IncomingRequest; //测试数据 21 IList<UserInfo> list = new List<UserInfo>() 22 { 23 new UserInfo(){ Id=1, Code="000001", Name="乔峰", Description="乔大爷啊"}, 24 new UserInfo(){ Id=2, Code="600000", Name="段誉", Description="你爹真是风流倜傥啊"} 25 new UserInfo(){ Id=3, Code="000002", Name="慕容复", Description="妹子被楼上的抢咯,太失败了"}, 26 new UserInfo(){ Id=4, Code="000008", Name="庄聚贤", Description="无所事事的帅哥庄聚贤"} 27 }; 28 return list.Where(e => e.Code == code).FirstOrDefault(); 29 } 32 public UserInfo Register(UserInfo user) 33 { 34 if (user == null) 35 return null; 36 user.Description = "POST搞定了!"; 37 return user; 38 } 40 } 41 }
4、定义web资源请求和响应格式:
1 /// <summary> 2 /// web请求格式 3 /// </summary> 4 public const WebMessageFormat WebRequestFormat = WebMessageFormat.Xml; 5 6 /// <summary> 7 /// web相应格式 8 /// </summary> 9 public const WebMessageFormat WebResponseFormat = WebMessageFormat.Xml; 10 11 12 /// <summary> 13 /// 请求内容封装方式 14 /// </summary> 15 public const WebMessageBodyStyle WebBodyStyle = WebMessageBodyStyle.Bare;
5、Global全局资源文件,注册服务的路由:
1 protected void Application_Start(object sender, EventArgs e) 2 { 3 RegisterRoutes(); 4 } 5 6 private static void RegisterRoutes() 7 { 8 RouteTable.Routes.Add(new ServiceRoute("user", new WebServiceHostFactory(), GetServiceType("WcfUserService"))); 9 } 10 11 private static Type GetServiceType(string typeName) 12 { 13 string typeFullName = String.Format("MyWcfService.{0},MyWcfService", typeName); 14 return Type.GetType(typeFullName); 15 }
6、wcf配置文件:
1 <system.serviceModel> 2 <bindings> 3 <netTcpBinding> 4 <binding name="defaultNetTcpBinding" closeTimeout="00:01:00" 5 openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 6 transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" 7 hostNameComparisonMode="StrongWildcard" listenBacklog="10" 8 maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="100" 9 maxReceivedMessageSize="2147483647"> 10 <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 11 maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 12 <reliableSession ordered="true" inactivityTimeout="00:10:00" 13 enabled="false" /> 14 <security mode="None"> 15 <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" /> 16 <message clientCredentialType="Windows" /> 17 </security> 18 </binding> 19 </netTcpBinding> 20 </bindings> 21 <behaviors> 22 <serviceBehaviors> 23 24 <behavior name="defaultResultBehavior"> 25 <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 --> 26 <serviceMetadata httpGetEnabled="true"/> 27 <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 --> 28 <serviceDebug includeExceptionDetailInFaults="true"/> 29 <dataContractSerializer maxItemsInObjectGraph="6553500"/> 30 </behavior> 31 </serviceBehaviors> 32 <endpointBehaviors> 33 <behavior name="defaultRestEndpointBehavior"> 34 <webHttp helpEnabled="true" automaticFormatSelectionEnabled="true" /> 35 <dataContractSerializer maxItemsInObjectGraph="6553500"/> 36 </behavior> 37 <behavior> 38 <dataContractSerializer maxItemsInObjectGraph="6553500"/> 39 </behavior> 40 </endpointBehaviors> 41 </behaviors> 42 <services> 43 <service name="MyWcfService.WcfUserService" behaviorConfiguration="defaultResultBehavior"> 44 <endpoint contract="MyWcfService.IUserService" binding="webHttpBinding" behaviorConfiguration="defaultRestEndpointBehavior" /> 45 </service> 46 47 </services> 48 <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" /> 49 </system.serviceModel>
文件代码都准备的差不多了,运行服务看下效果:
调用GET方法,返回xml数据:
ok,一个RestFul WCF就搭建完毕。
下一篇文章还是基于这个demo,如何使用dynamic解析Http RestFul xml格式响应数据,并展现在客户端。
转载于:https://www.cnblogs.com/KingLei/p/3204937.html
构建RESTful风格的WCF服务相关推荐
- 在 Docker 上运行一个 RESTful 风格的微服务
tags: Microservice Restful Docker Author: Andy Ai Weibo: NinetyH GitHub: https://github.com/aiyanbo/ ...
- springboot构建RESTful 风格应用
Spring Boot 构建 RESTful 风格应用 1.Web开发的两种模式: 前后端不分离: 以前没有移动互联网时,我们做的大部分应用都是前后端不分的,比如jsp,或者thymeleaf等后端分 ...
- SpringBoot——JPA的使用、构建restful风格的JPA
1.JPA概述 JPA:Java持久化规范.JPA(Java Persistence API)是Sun官方提出的Java持久化规范.为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的 ...
- java restful接口开发实例_Spring Boot 中 10 行代码构建 RESTful 风格应用!
点击上方"Java后端技术",选择"置顶或者星标" 你关注的就是我关心的! 作者:江南一点雨 微信公众号:牧码小子(ID:a_javaboy) 推荐阅读:10个 ...
- restful接口开发实例_Spring Boot 中 10 行代码构建 RESTful 风格应用
松哥原创的四套视频教程已经全部杀青,感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程 RESTful ,到现在相信已经没人不知道这个东西了吧!关于 RESTful 的概念 ...
- springmvc+swagger构建Restful风格文档
本次和大家分享的是java方面的springmvc来构建的webapi接口+swagger文档:上篇文章分享.net的webapi用swagger来构建文档,因为有朋友问了为啥.net有docpage ...
- 使用Swashbuckle构建RESTful风格文档
本次和大家分享的是Swagger to WebApi的nuget包Swashbuckle:因为项目需要统一api文档的风格,并要支持多种开发语言(C#,java,python),所以首先想到的是swa ...
- Spring Boot文档阅读笔记-构建Restful风格的WebService
Maven代码如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...
- Spring Boot文档阅读笔记-构建Restful风格的WebService客户端
对应的maven如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...
最新文章
- QQ好友列表数据模型封装
- PowerShell-1.入门及其常用
- Ubuntu16.04 使用sudo cat EOF 编辑文件,提示Permission denied错误的解决办法
- [搜索]波特词干(Porter Streamming)提取算法详解(2)
- CWnd与HWND的区别与转换
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- centos7 mysql
- 《iOS9开发快速入门》——第1章,第1.4节小结
- vue axios 接口封装
- 我写的万年历插件(含天干地支,农历,阳历,节气,各种节假日等),基于MooTools 1.4
- OPTEE:CA-TA会话的创建(二)
- 谷歌浏览器好用的复制粘贴插件_Chrome粘贴插件:将其粘贴
- uboot usb网卡分析
- 京东青龙面板撸豆_搭建环境流程
- Java发起GET请求的二三事
- thinkpad x12018换固态_终极之后是否还有究极?ThinkPad X1 Carbon 2018评测
- AI开发过程中常用开发命令及软件安装
- html网站手机最小字体大小,html在手机浏览器如何设置字体大小
- java ocr识别中文_java零碎要点—Tesseract 3.0,Java OCR 图像智能字符识别技术,可识别中文 | 学步园...
- 银联报文中和密码相关域
热门文章
- 淘宝Tengine服务器开源
- c#中什么情况下用(int)什么情况下用Convert.ToInt32
- 在 ASP.NET 中执行 URL 重写
- gRPC简介及简单使用(C++)
- Ubuntu 14.04上安装pip3/numpy/matplotlib/scipy操作步骤
- 【数据库】sqlite中PRAGMA命令说明
- 【linux】在CentOS7上更改端口号时报错:Job for sshd.service failed because the control process exited with error
- python多功能电子钟_python gui - PyQt4 精彩实例分析之电子钟
- java并发vol_java 并发中 volitile、synchronized和lock的比较(一)
- 有关Run-Time Check Failure #2 - Stack around the variable 'XXX' was corrupted.错误的解决方法