博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
构建RESTful风格的WCF服务
阅读量:6503 次
发布时间:2019-06-24

本文共 4863 字,大约阅读时间需要 16 分钟。

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 IUserService12     {13         /// 14         /// 根据code获取对象(GET请求处理)15         /// 16         /// 17         /// 
18 [OperationContract]19 [WebGet(UriTemplate = "search/{code}", ResponseFormat = ServiceEnvironment.WebResponseFormat, RequestFormat = ServiceEnvironment.WebRequestFormat, BodyStyle = ServiceEnvironment.WebBodyStyle)]20 UserInfo GetUserInfoSingle(string code);21 22 /// 23 /// 注册新的用户(POST请求处理)24 /// 25 /// 注册用户信息26 ///
注册成功返回注册用户基本信息
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 MyWcfService12 {13     [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]14     public class WcfUserService : IUserService15     {
18 public UserInfo GetUserInfoSingle(string code)19 {20 // var request= WebOperationContext.Current.IncomingRequest;          //测试数据21 IList
list = new List
()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 ///  2         /// web请求格式 3         ///  4         public const WebMessageFormat WebRequestFormat = WebMessageFormat.Xml; 5  6         ///  7         /// web相应格式 8         ///  9         public const WebMessageFormat WebResponseFormat = WebMessageFormat.Xml;10 11 12         /// 13         /// 请求内容封装方式14         /// 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  
2
3
4
10
12
14
15
16
17
18
19
20
21
22
23 24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 47
48
49

文件代码都准备的差不多了,运行服务看下效果:

调用GET方法,返回xml数据:

ok,一个RestFul WCF就搭建完毕。

下一篇文章还是基于这个demo,,并展现在客户端。

转载于:https://www.cnblogs.com/KingLei/p/3204937.html

你可能感兴趣的文章
sudo php 无法打开,从PHP / Apache,exec()或system()程序作为root用户:“ sudo:无法打开审核系统:权限被拒绝”...
查看>>
sql数据库java连接sqlserver2005数据库
查看>>
clientapivc api TCP&UDP—helloworld
查看>>
下划线的学习1
查看>>
在struts2.3.4.1中使用注解、反射、拦截器实现基于方法的权限控制
查看>>
单例模式 - 程序实现(Java)
查看>>
如何隐藏Cognos Viewer
查看>>
响应式网页设计:rem、em设置网页字体大小自适应
查看>>
ImageView的属性android:scaleType
查看>>
商业智能给数据获取带来的局部效益案例
查看>>
巧妙运用二进制验证权限
查看>>
C#中的WebBrowser控件的使用
查看>>
(转)<Unity3D>Unity3D在android下调试
查看>>
configure JAAS for jboss 7.1 and mysql--reference
查看>>
04. 字符串合并与拆分写法小结
查看>>
使用goldengate交付指定时间前的数据
查看>>
OpenStack 部署运维实战
查看>>
Android -- 触摸Area对焦区域(更新)
查看>>
uva 12730(期望经典)
查看>>
c# 工具
查看>>