使用多种客户端消费WCF RestFul服务(一)——服务端
RestFul风格的WCF既然作为跨平台、跨语言、跨技术的一种方式出现,并且在ASP.NET API流行起来之前还是架构的首选技术之一,那么我们就来简要的介绍一下WCF在各个平台客户端的操作。
开发工具及版本:Microsoft Visual Studio 2013(.net 4.0),jQuery JavaScript Library v1.4.2,
服务端创建步骤:
第一步:
打开vs创建一个类库名为:ILongshi.BIZ。(为何要创建类库而不是WCF类库,是要完全从头开始手动完成所有操作并且加深对WCF的理解)。

删除多余的Class1类,创建一个User类,具备ID,NAME,AGE属性,然后为类名加上属性DataContract,字段名加上属性DataMember,
解释:一旦声明一个类型为DataContract,那么该类型就可以被序列化在服务端和客户端之间传送,只有声明为DataContract的类型的对象可以被传送,且只有成员属性会被传递,成员方法不会被传递。但是默认情况下,所有的成员属性都被排除在外,因此需要把每一个要传送的成员声明为DataMember才能被传递。
具体代码如:
[DataContract]
[Serializable]
public class User
{
[DataMember]
public string ID { get; set; }
[DataMember]
public string Age { get; set; }
[DataMember]
public string Name { get; set; }
}
添加引用的组件有:

第二步:
创建服务契约,创建一个名为UserService的类(这里我们不直接创建接口,但是建议创建成接口,还是那句话,快速构建),然后依次创建4个具有代表性的方法:

然后为类加上属性:
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode =
AspNetCompatibilityRequirementsMode.Allowed)]
再为每一个方法加上属性:
[OperationContract]
[WebInvoke]
解释:[ServiceContract] 这个特性告诉编译器,该类型是一个服务契约,
[OperationContract] 这个特性告诉编译器,该成员是一个操作契约,
详细代码如:
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode =
AspNetCompatibilityRequirementsMode.Allowed)]
public class UserService
{
[OperationContract]
[WebInvoke(UriTemplate = "GetPerson", ResponseFormat = WebMessageFormat.Json, Method = "GET")]
public User GetUser()
{
return new User { Age="", ID="", Name="zhangsan"};
} [OperationContract]
[WebInvoke(UriTemplate = "GetPersonById/{id}", ResponseFormat = WebMessageFormat.Json, Method = "GET")]
public User GetUserById(string id)
{
return new User { Age = "", ID = id, Name = "lisi" };
} [OperationContract]
[WebInvoke(UriTemplate = "GetPersonPost", ResponseFormat = WebMessageFormat.Json, Method = "POST")]
public User GetUserPost()
{
return new User { Age = "", ID = "", Name = "wangwu" };
} [OperationContract]
[WebInvoke(UriTemplate = "GetPersonPostById", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json, Method = "POST")]
public User GetUserPostById(string id, string name, string age)
{
return new User { Age = age, ID = id + "server", Name = name };
}
}
前2个方法分别为有参和无参GET方式,后2个分别为有参和无参POST方式。如此服务端就完成了。
第三步:
创建宿主和异形一样,没有母体他没办法运行,这里我们将宿主创建成网站,那么请在解决方案管理器中右键,然后创建一个WEB空应用程序。

然后添加对刚才类库的引用

打开Web.config在configuration节点下system.web节点上创建system.serviceModel节点,依次增加需要的其他配置,具体代码如下:
详细代码:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true">
<serviceActivations>
<add relativeAddress="UserService.svc" service="ILongshi.BIZ.UserService"/>
</serviceActivations>
</serviceHostingEnvironment>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="BehaviorConfig">
<webHttp helpEnabled="true"/>
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="ILongshi.BIZ.UserService">
<endpoint address="" behaviorConfiguration="BehaviorConfig" binding="webHttpBinding" contract="ILongshi.BIZ.UserService"/>
</service>
</services>
</system.serviceModel>
解释:默认情况下ASP.NET兼容性支持是关闭的,但很多时候需要打开Asp.Net的兼容性来利用Asp.Net的一些特性(使用session,上下文等),具体可参考http://msdn.microsoft.com/zh-cn/library/ms752234.aspx。
如果要打开兼容性,需要做两步:一是在服务类加上如下标记:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class AppRuntimeStateSvc : IAppRuntimeStateSvc
{
//服务代码.
}
二是在web.config中的<system.serviceModel>段里加:
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
注意框架3.5以前都是默认就支持的,4.0以后默认就是没有打开兼容性支持的。
includeExceptionDetailInFaults要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息
将httpGetEnabled设置为true,使客户端能够成功捕获服务
其余就是标准绑定了,如果address值为空,那么endpoint的地址就是默认的基地址(Base Address)。
第四步:
查看服务,将项目WEBHOST设置为启动项目,然后F5,在自动生成的网址后面加上配置的服务名,一切正常的话会出现这个页面:

试着访问下第一个服务,在地址后面加上操作名,如http://localhost:3720/userService.svc/GetPerson
将会出现:(建议使用火狐或者GOOGLE浏览器调试IE地址栏显示不全)

能看到这个就证明服务发布OK了,并且返回的是JSON格式。
本节源代码:下载
使用多种客户端消费WCF RestFul服务(一)——服务端的更多相关文章
- 使用多种客户端消费WCF RestFul服务(四)——Jquery篇
Jquery篇 互联网开发中少不了各类前端开发框架,其中JQUERY就是最流行之一,本篇我们就采用JQUERY来消费WCF RestFul服务,其中用到JSON基础知识,如果有想了解的朋友,请访问:& ...
- 使用多种客户端消费WCF RestFul服务(三)——.net4.5篇
.net 4.5篇 在.net 4.5下面微软提供了System.Net.Http.dll可以非常方便的使用HTTP请求(其实是用来支持Asp.Net Web Api的,不过我们可以拿过来用) 服务仍 ...
- 使用多种客户端消费WCF RestFul服务(二)——.net4.0篇
.net 4.0篇 在.net 4.0下面微软并没有提供类似Net.Http的Rest访问组件,而是在codeplex上面提供的WCF REST Starter Kit Preview 2 里面可以找 ...
- WCF Restful Service的服务
构建基于WCF Restful Service的服务 前言 传统的Asmx服务,由于遵循SOAP协议,所以返回内容以xml方式组织.并且客户端需要添加服务端引用才能使用(虽然看到网络上已经提供了这方面 ...
- 构建基于WCF Restful Service的服务
前言 传统的Asmx服务,由于遵循SOAP协议,所以返回内容以xml方式组织.并且客户端需要添加服务端引用才能使用(虽然看到网络上已经提供了这方面的Dynamic Proxy,但是没有这种方式简便), ...
- [转]构建基于WCF Restful Service的服务
本文转自:http://www.cnblogs.com/scy251147/p/3566638.html 前言 传统的Asmx服务,由于遵循SOAP协议,所以返回内容以xml方式组织.并且客户端需要添 ...
- WCF Restful Service
对 Web Services.WCF 和 Restful 的扫盲可参见:https://www.cnblogs.com/scy251147/p/3382436.html 关于之前对 WCF 的学习,可 ...
- Wcf Restful Service服务搭建
目的 使用Wcf(C#)搭建一个Restful Service 背景 最近接到一个项目,客户要求使用Restful 方式接收到数据,并对数据提供对数据的统计显示功能,简单是简单,但必须要使用Restf ...
- Silverlight客户端调用WCF服务难题解疑
一:解决办法 Silverlight客户端调用WCF服务在实际使用中经常会出现的问题就是无法直接应用类文件和配置文件.微软针对这一情况已经给出了解决办法.WCF开发框架可以帮助我们实现可靠性较高的跨平 ...
随机推荐
- Comon.Logging与Log4net联合使用
1.摘要 Common.Logging定义了一种接口的公共接口,尤其在Quartz.net中作为接口型的组件,而具体则使用log4net,nlog等组件. 2.使用步骤 Install-Package ...
- 使用“Empty 模式”改进 Null Object
概述 Null Object 是Martin 大师提出的一种重构手段,其思想就是通过多态(派生一个Null对象)来减少逻辑(if … then …else)的判断. 而.NET中已经有Null Obj ...
- 三十分钟掌握STL
这是本小人书.原名是<using stl>,不知道是谁写的.不过我倒觉得很有趣,所以化了两个晚上把它翻译出来.我没有对翻译出来的内容校验过.如果你没法在三十分钟内觉得有所收获,那么赶紧扔了 ...
- Storm Grouping —— 流分组策略
Storm Grouping: Shuffle Grouping :随机分组,尽量均匀分布到下游Bolt中 将流分组定义为混排.这种混排分组意味着来自Spout的输入将混排,或随机分发给此Bolt中的 ...
- TYVJ 1011 NOIP 2008&&NOIP 2000 传纸条&&方格取数 Label:多线程dp
做题记录:2016-08-15 15:47:07 背景 NOIP2008复赛提高组第三题 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行 ...
- WebRTC手记之本地音频采集
转载请注明出处:http://www.cnblogs.com/fangkm/p/4374668.html 上一篇博文介绍了本地视频采集,这一篇就介绍下音频采集流程,也是先介绍WebRTC原生的音频采集 ...
- 新鲜出炉的30个精美的 jQuery & CSS3 效果【附演示和教程】
新鲜出炉的30个精美的 jQuery & CSS3 效果[附演示和教程] 作为最流行的 JavaScript 开发框架,jQuery 在现在的 Web 开发项目中扮演着重要角色,它简化了 ...
- [Delphi]Delphi开发的一些技巧
一.提高查询效率先进行准备查询操作: CustomerQuery.Close; if not (CustomerQuery.Prepared) then -->查询是否已准备好 Customer ...
- python 安装pip的时候出现UnicodeEncodeError错误
另外 Python 中一个比较常见的问题是编码问题,若遇到类似"UnicodeEncodeError: 'ascii' codec can't encode character u'\u62 ...
- Javascript 笔记与总结(2-5)window 对象
浏览器 window 对象(BOM)是浏览器宿主对象,和 js 语言无关. [window 对象的方法] window.alert(message); window.confirm(message); ...