使用多种客户端消费WCF RestFul服务(二)——.net4.0篇
.net 4.0篇
在.net 4.0下面微软并没有提供类似Net.Http的Rest访问组件,而是在codeplex上面提供的WCF REST Starter Kit Preview 2 里面可以找到早期的版本,访问地址:http://aspnet.codeplex.com/releases/view/24644,这个问题在.net 4.5中得到明确支持和完美解决。那我们就从这个地址下载安装包进行安装,然后在C盘默认的路径下找到这几个DLL:“Microsoft.Http.dll”、“Microsoft.Http.Extensions.dll”准备添加到项目的引用中去。
注意:本篇介绍的是基于接近0配置的实现方式,右键添加引用和非常庞大的配置的方法不在研究之列。
上一篇中我们介绍了服务端如何去搭建,那么服务暂时就还是使用上一篇的。
开发工具:Visual Studio 2013
.net版本:4.0
一、新建控制台程序:
注意:WinForm、WebForm的方式将会一样。
打开Visual Studio 2013新建控制台WCFRestFulClient4,添加对组建的引用:

最后一个是用来序列化和反序列化JSON的,可以在这里下载得到最新版:http://json.codeplex.com/
然后添加和服务端字段一致的实体类如下:
public class User
{
public string ID { get; set; }
public string Age { get; set; }
public string Name { get; set; }
}
这里不需要其他的修饰,仅仅只是为了反序列化用。
二、新建一个辅助类:
为了更加直观看到每种操作的结果,特新建辅助类ClientHelper,千万别赋予这个类其他的想象,他仅仅只是一个普通类(绝对不是微软WCF自动生成的代理类)。添加4种操作方法:
public static void GetPerson()
{
var client = new HttpClient();
var strUrl =baseUrl+ "GetPerson"; var response = client.Get(strUrl);
response.EnsureStatusIsSuccessful();
var json = response.Content.ReadAsString();
var data = JsonConvert.DeserializeObject<User>(json);
Console.WriteLine(data);
}
//2 ok
public static void GetPersonById()
{ var client = new HttpClient();
var strUrl = baseUrl+"GetPersonById/1"; var response = client.Get(strUrl);
response.EnsureStatusIsSuccessful();
var json = response.Content.ReadAsString();
var data = JsonConvert.DeserializeObject<User>(json);
Console.WriteLine(data);
} //3 ok
public static void GetPersonPost()
{
var task = new User { ID = "" };
var client = new HttpClient();
var strUrl = baseUrl+"GetPersonPost";
var response = client.Post(strUrl, GetContent(task));
response.EnsureStatusIsSuccessful();
Console.WriteLine(response.Content.ReadAsString());
} //4 ok
public static void GetPersonPostById()
{
var task = new User { Age = "", ID = "", Name = "zhangsan" }; ;
var client = new HttpClient();
var strUrl = baseUrl+"GetPersonPostById";
var response = client.Post(strUrl, GetContent(task));
response.EnsureStatusIsSuccessful();
Console.WriteLine(response.Content.ReadAsString()); }
解释:使用Get方式请求服务,只需一个参数就是URL,如果要带参在URL后面加,但是使用POST方式请求服务就需要一个HttpContent,这个HttpContent里面一般包含的是参数,如果服务端定义为接收JSON类型,那么这里就需要序列化参数为JSON类型,服务端默认会解析成对象,PUT和DELETE暂时不讨论。
另附产生HttpContent的方式:
private static HttpContent GetContent(User task)
{
var strContent = JsonConvert.SerializeObject(task);
var data = System.Text.Encoding.UTF8.GetBytes(strContent);
return HttpContent.Create(data, "application/json");
}
无论是哪种方式,都需要调用response.Content.ReadAsString();来获取响应字符串,然后根据实际情况去解析他。
response.EnsureStatusIsSuccessful()的作用是检查响应的StatusCode。
那么这4个方法写完,只需在main方法中调用即可出现结果,具体步骤为:先启动服务端ILongshi.BIZ:

然后启动客户端WCFRestFulClient4:

为了证实POST的参数能够传递过去,我们断点调试服务端:

既然参数传递到了,就可以NNN~~~了。
本篇代码下载:点击
使用多种客户端消费WCF RestFul服务(二)——.net4.0篇的更多相关文章
- 使用多种客户端消费WCF RestFul服务(三)——.net4.5篇
.net 4.5篇 在.net 4.5下面微软提供了System.Net.Http.dll可以非常方便的使用HTTP请求(其实是用来支持Asp.Net Web Api的,不过我们可以拿过来用) 服务仍 ...
- 使用多种客户端消费WCF RestFul服务(四)——Jquery篇
Jquery篇 互联网开发中少不了各类前端开发框架,其中JQUERY就是最流行之一,本篇我们就采用JQUERY来消费WCF RestFul服务,其中用到JSON基础知识,如果有想了解的朋友,请访问:& ...
- 使用多种客户端消费WCF RestFul服务(一)——服务端
RestFul风格的WCF既然作为跨平台.跨语言.跨技术的一种方式出现,并且在ASP.NET API流行起来之前还是架构的首选技术之一,那么我们就来简要的介绍一下WCF在各个平台客户端的操作. 开发工 ...
- Springboot & Mybatis 构建restful 服务二
Springboot & Mybatis 构建restful 服务二 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务一 2 restful ...
- WCF Restful 服务 Get/Post请求
Restful Get方式请求: Restful服务 Get请求方式:http://localhost:10718/Service1.svc/Get/A/B/C http://localhost:1 ...
- IdentityServer4客户端JWT解密实现(基于.net4.0)
情景:公司项目基于.net4.0,web客户端实现单点登录需要自己解密id_token,对于jwt解密,.net提供了IdentityModel类库,但是4.0中该类库不可用,所以自己实现了解密方法. ...
- WCF Restful Post调用
一.首先建立Http的服务端,此示例的寄宿体为WindowsService,以下代码仅为WCF Restful服务代码,不包括服务启动和安装代码 1.服务契约 /// <summary> ...
- Springboot & Mybatis 构建restful 服务三
Springboot & Mybatis 构建restful 服务三 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务二 2 restful ...
- WCF Restful Service
对 Web Services.WCF 和 Restful 的扫盲可参见:https://www.cnblogs.com/scy251147/p/3382436.html 关于之前对 WCF 的学习,可 ...
随机推荐
- LightOJ1191 Bar Codes(DP)
题目大概是,二进制数可以看作是由几段连续的0和连续的1组成,问:n位没有前导0的 且 共用k段连续0/1组成的 且 连续0/1个数不超过m的二进制数有多少个. 用dp[n][k][m]表示问题 dp[ ...
- 在本地(Eclipse)运行第一个strom-starter例子
一.在Eclipse中建立storm项目: 具体步骤如下: 1.在Eclipse中新建java project项目并导入jar包: File-> New -> Java Project - ...
- POJ 1947 (树形DP+背包)
题目链接: http://poj.org/problem?id=1947 题目大意:树中各点都由一条边连接.问要弄出个含有m个点的(子)树,至少需要截去多少条边. 解题思路: 设dp[i][j]为i总 ...
- Java中的线程
http://hi.baidu.com/ochzqvztdbabcir/item/ab9758f9cfab6a5ac9f337d4 相濡以沫 Java语法总结 - 线程 一 提到线程好像是件很麻烦很复 ...
- 全面解析Linux数字文件权限
全面解析Linux数字文件权限 来源: 时间:2013-09-04 20:35:13 阅读数:11433 分享到:0 [导读] 在刚开始接触Linux时对于文件权限的理解并不是很透彻,这里详细 ...
- Sea.js创始人玉伯的前端开发之路
在Web应用程序的用户体验越来越被重视的今天,前端开发的地位也上升到了前所未有的高度,而随之而来的也有更多的挑战. 为了将前端开发者繁重的工作变得简单,框架应运而生.国内也不乏一些非常优秀的前端开发框 ...
- C Memory Layout C语言中的内存布局
在C语言中,内存的主要分为下列几部分: 1. Text/Code Segment 文本/代码区 2. Initialized Data Segments 初始化的数据区 3. Uninitialize ...
- [ZT] 几大酒店集团美国Co-Brand信用卡比较(三)如何选择最适合你的酒店联名信用卡
原文地址: http://www.3798.com/archives/596.html 接着对我们这种不是某个酒店忠诚客户的用户选择卡片进行分析.首先要强调的是,我们比较的是信用卡项目本身,而不是酒店 ...
- LINQ Count/Sum/Min/Max/Avg
参考:http://www.cnblogs.com/peida/archive/2008/08/11/1263384.html Count/Sum/Min/Max/Avg用于统计数据,比如统计一些数据 ...
- 关于如何用php 获取当前脚本的url
关于用php 获取当前脚本的url很多朋友会说很简单,但是要获取很详细的就要经过多次判断哦. $PHP_TIME = time();$PHP_SELF = isset($_SERVER['PHP_SE ...