.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篇的更多相关文章

  1. 使用多种客户端消费WCF RestFul服务(三)——.net4.5篇

    .net 4.5篇 在.net 4.5下面微软提供了System.Net.Http.dll可以非常方便的使用HTTP请求(其实是用来支持Asp.Net Web Api的,不过我们可以拿过来用) 服务仍 ...

  2. 使用多种客户端消费WCF RestFul服务(四)——Jquery篇

    Jquery篇 互联网开发中少不了各类前端开发框架,其中JQUERY就是最流行之一,本篇我们就采用JQUERY来消费WCF RestFul服务,其中用到JSON基础知识,如果有想了解的朋友,请访问:& ...

  3. 使用多种客户端消费WCF RestFul服务(一)——服务端

    RestFul风格的WCF既然作为跨平台.跨语言.跨技术的一种方式出现,并且在ASP.NET API流行起来之前还是架构的首选技术之一,那么我们就来简要的介绍一下WCF在各个平台客户端的操作. 开发工 ...

  4. Springboot & Mybatis 构建restful 服务二

    Springboot & Mybatis 构建restful 服务二 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务一 2 restful ...

  5. WCF Restful 服务 Get/Post请求

    Restful  Get方式请求: Restful服务 Get请求方式:http://localhost:10718/Service1.svc/Get/A/B/C http://localhost:1 ...

  6. IdentityServer4客户端JWT解密实现(基于.net4.0)

    情景:公司项目基于.net4.0,web客户端实现单点登录需要自己解密id_token,对于jwt解密,.net提供了IdentityModel类库,但是4.0中该类库不可用,所以自己实现了解密方法. ...

  7. WCF Restful Post调用

    一.首先建立Http的服务端,此示例的寄宿体为WindowsService,以下代码仅为WCF Restful服务代码,不包括服务启动和安装代码 1.服务契约 /// <summary> ...

  8. Springboot & Mybatis 构建restful 服务三

    Springboot & Mybatis 构建restful 服务三 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务二 2 restful ...

  9. WCF Restful Service

    对 Web Services.WCF 和 Restful 的扫盲可参见:https://www.cnblogs.com/scy251147/p/3382436.html 关于之前对 WCF 的学习,可 ...

随机推荐

  1. HDU3586 Information Disturbing(树形DP)

    题目大概说一棵树有边权,要删掉一些边,使叶子到达不了树根1且删掉边的权和小于等于m,问删掉边中最大权的最小值能是多少. 考虑问题规模,与转移的时间复杂度,用这么个状态dp: dp[u][k]表示在u结 ...

  2. [转]C++设计模式:Builder模式

    Builder模式要解决的问题是,当我们要创建很复杂的对象时,有时候需要将复杂对象的创建过程和这个对象的表示分离开来.由于在每一步的构造过程中可以映入不同参数,所以步骤相同但是最后的对象却不一样.也就 ...

  3. Java多线程编程详解

    转自:http://programming.iteye.com/blog/158568 线程的同步 由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题.Ja ...

  4. linux fork 进程后 主进程的全局变量

    fork一个进程后,复制出来的task_struct结构与系统的堆栈空间是父进程独立的,但其他资源却是与父进程共享的,比如文件指针,socket描述符等 不同的进程使用不同的地址空间,子进程被创建后, ...

  5. [Cocos2d-x For WP8]Transition 场景切换

    在游戏中通常会打完了一关之后就会从当前的场景转换到另外一关的场景了,在Cocos2d-x中是由CCScene类表示一个场景.那么场景(CCScene)是为游戏中的精灵(CCSprite)提供了舞台,场 ...

  6. [转帖] VS集成Qt环境搭建

    http://blog.sina.com.cn/s/blog_a6fb6cc90101gynd.html 用了这么久的Qt,IDE一直都是VS与Creator并用(实际开发以VS为主),至于哪个更好这 ...

  7. NodeJs - 100

    Nodejs官方文档 https://nodejs.org/en/docs/ Nodejs官方网站 https://nodejs.org/en/ Nodejs的特征:  1.采用非阻塞性IO机制:—— ...

  8. java工程包的命名(-dev.jar,-javadoc.jar,jar)

    1.-javadoc.jar 这个应该是一个doc包,就是API,相当于帮助文档,用来说明类.方法.静态变量 都是干什么的. 2.-dev.jar,.jar都有可能包含源码,也可能都不包含

  9. 《GK101任意波形发生器》任意波文件格式说明

    详见PDF 文档: http://files.cnblogs.com/xiaomagee/GK101%E4%BB%BB%E6%84%8F%E6%B3%A2%E6%95%B0%E6%8D%AE%E6%A ...

  10. 基于 jQuery Jcrop 插件的功能模块:头像剪裁

    /** Jcrop version: 0.9.12 jQuery version: 1.9.0 Author: 小dee Date: 2014.10.30 */ 先看看他山之石:博客园的头像模块也是使 ...