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服务相关推荐

  1. 在 Docker 上运行一个 RESTful 风格的微服务

    tags: Microservice Restful Docker Author: Andy Ai Weibo: NinetyH GitHub: https://github.com/aiyanbo/ ...

  2. springboot构建RESTful 风格应用

    Spring Boot 构建 RESTful 风格应用 1.Web开发的两种模式: 前后端不分离: 以前没有移动互联网时,我们做的大部分应用都是前后端不分的,比如jsp,或者thymeleaf等后端分 ...

  3. SpringBoot——JPA的使用、构建restful风格的JPA

    1.JPA概述 JPA:Java持久化规范.JPA(Java Persistence API)是Sun官方提出的Java持久化规范.为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的 ...

  4. java restful接口开发实例_Spring Boot 中 10 行代码构建 RESTful 风格应用!

    点击上方"Java后端技术",选择"置顶或者星标" 你关注的就是我关心的! 作者:江南一点雨 微信公众号:牧码小子(ID:a_javaboy) 推荐阅读:10个 ...

  5. restful接口开发实例_Spring Boot 中 10 行代码构建 RESTful 风格应用

    松哥原创的四套视频教程已经全部杀青,感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程 RESTful ,到现在相信已经没人不知道这个东西了吧!关于 RESTful 的概念 ...

  6. springmvc+swagger构建Restful风格文档

    本次和大家分享的是java方面的springmvc来构建的webapi接口+swagger文档:上篇文章分享.net的webapi用swagger来构建文档,因为有朋友问了为啥.net有docpage ...

  7. 使用Swashbuckle构建RESTful风格文档

    本次和大家分享的是Swagger to WebApi的nuget包Swashbuckle:因为项目需要统一api文档的风格,并要支持多种开发语言(C#,java,python),所以首先想到的是swa ...

  8. Spring Boot文档阅读笔记-构建Restful风格的WebService

    Maven代码如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  9. Spring Boot文档阅读笔记-构建Restful风格的WebService客户端

    对应的maven如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

最新文章

  1. QQ好友列表数据模型封装
  2. PowerShell-1.入门及其常用
  3. Ubuntu16.04 使用sudo cat EOF 编辑文件,提示Permission denied错误的解决办法
  4. [搜索]波特词干(Porter Streamming)提取算法详解(2)
  5. CWnd与HWND的区别与转换
  6. 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
  7. centos7 mysql
  8. 《iOS9开发快速入门》——第1章,第1.4节小结
  9. vue axios 接口封装
  10. 我写的万年历插件(含天干地支,农历,阳历,节气,各种节假日等),基于MooTools 1.4
  11. OPTEE:CA-TA会话的创建(二)
  12. 谷歌浏览器好用的复制粘贴插件_Chrome粘贴插件:将其粘贴
  13. uboot usb网卡分析
  14. 京东青龙面板撸豆_搭建环境流程
  15. Java发起GET请求的二三事
  16. thinkpad x12018换固态_终极之后是否还有究极?ThinkPad X1 Carbon 2018评测
  17. AI开发过程中常用开发命令及软件安装
  18. html网站手机最小字体大小,html在手机浏览器如何设置字体大小
  19. java ocr识别中文_java零碎要点—Tesseract 3.0,Java OCR 图像智能字符识别技术,可识别中文 | 学步园...
  20. 银联报文中和密码相关域

热门文章

  1. 淘宝Tengine服务器开源
  2. c#中什么情况下用(int)什么情况下用Convert.ToInt32
  3. 在 ASP.NET 中执行 URL 重写
  4. gRPC简介及简单使用(C++)
  5. Ubuntu 14.04上安装pip3/numpy/matplotlib/scipy操作步骤
  6. 【数据库】sqlite中PRAGMA命令说明
  7. 【linux】在CentOS7上更改端口号时报错:Job for sshd.service failed because the control process exited with error
  8. python多功能电子钟_python gui - PyQt4 精彩实例分析之电子钟
  9. java并发vol_java 并发中 volitile、synchronized和lock的比较(一)
  10. 有关Run-Time Check Failure #2 - Stack around the variable 'XXX' was corrupted.错误的解决方法