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

时间:2022-12-30 22:35:46

.net 4.5篇

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

服务仍然就还是使用第一篇的。

开发工具:Visual Studio 2013

.net版本:4.5

一、新建控制台程序:

注意:WinForm、WebForm的方式将会一样,风格还是接近0配置,个人比较讨厌繁杂的配置,所以大篇幅的web.config不在本篇讨论之列。

打开Visual Studio 2013新建控制台WCFRestFulClient45,添加对组建的引用:

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

注意:这里光引用上面2个还不够,还需要引用一个MVC的,如下所述:

C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\System.Net.Http.Formatting.dll

才可以使用ReadAsAsync的异步读取,而ReadAsAsync是在System.Net.Http.HttpContentExtensions类中定义的一个扩展方法。没有参数,它会使用媒体类型格式化器的默认设置,以便于解析响应体。默认格式化器支持JSON、XML和经过url编码的表单数据(Form-url-encoded data)。(Result属性的过程是线程阻塞的)

当然Newtonsoft.Json.dll还得用,他是用来序列化和反序列化JSON的,可以在这里下载得到最新版:http://json.codeplex.com/

引用完成之后的完整截图如下:

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

然后添加和服务端字段一致的实体类如下:

public class User
{
public string ID { get; set; }
public string Age { get; set; }
public string Name { get; set; }
}

二、新建一个辅助类:

为了更加直观看到每种操作的结果,特新建辅助类ClientHelper,千万别赋予这个类其他的想象,他仅仅只是一个普通类(绝对不是微软WCF自动生成的代理类)。添加4种操作方法:

private readonly static string baseUrl = "http://localhost:3720/UserService.svc/";
//1 ok
public static void GetPerson()
{
var strUrl = baseUrl + "GetPerson";
HttpClient client = new HttpClient();
HttpResponseMessage response = client.GetAsync(strUrl).Result;
User u= response.Content.ReadAsAsync<User>().Result;
Console.WriteLine(u.Name);
}
//2 ok
public static void GetPersonById()
{ var strUrl = baseUrl + "GetPersonById/1";
HttpClient client = new HttpClient();
HttpResponseMessage response = client.GetAsync(strUrl).Result;
User u = response.Content.ReadAsAsync<User>().Result;
Console.WriteLine(u.Name);
} //3 ok
public static void GetPersonPost()
{
var user = new User { ID = "" };
var strUrl = baseUrl + "GetPersonPost";
HttpClient client = new HttpClient();
var response = client.PostAsJsonAsync(strUrl, user).Result;
User u = response.Content.ReadAsAsync<User>().Result;
Console.WriteLine(u.Name);
} //4 ok
public static void GetPersonPostById()
{
var user = new User { Age = "", ID = "", Name = "zhangsan" }; ;
var strUrl = baseUrl + "GetPersonPostById";
HttpClient client = new HttpClient();
var response = client.PostAsJsonAsync(strUrl, user).Result;
User u = response.Content.ReadAsAsync<User>().Result;
Console.WriteLine(u.Name);
}

这回对照上一章,我们明显发现调用变得简单了,要POST数据就直接传递实例化好的对象进去即可,服务端可以完美的接收到参数。并且加之ReadAsAsync异步方法,返回的数据可以直接使用。

最终调用结果如:

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

同样,为了证明参数被传递到了WCF,我们断点调试抓图如下:

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

可以看出,非常轻松的完成了.net 4.5的WCF RestFul访问,但是微软的重点在于Asp.Net Web Api,当然本博客也会接下来对Asp.Net Web Api进行研究,希望大家继续关注。

本篇源代码下载:点击下载

使用多种客户端消费WCF RestFul服务(三)——.net4.5篇的更多相关文章

  1. 使用多种客户端消费WCF RestFul服务&lpar;二&rpar;——&period;net4&period;0篇

    .net 4.0篇 在.net 4.0下面微软并没有提供类似Net.Http的Rest访问组件,而是在codeplex上面提供的WCF REST Starter Kit Preview 2 里面可以找 ...

  2. 使用多种客户端消费WCF RestFul服务&lpar;四&rpar;——Jquery篇

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

  3. 使用多种客户端消费WCF RestFul服务&lpar;一&rpar;——服务端

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

  4. Springboot &amp&semi; Mybatis 构建restful 服务三

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

  5. WCF Restful 服务 Get&sol;Post请求

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

  6. WCF Restful Post调用

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

  7. Springboot &amp&semi; Mybatis 构建restful 服务四

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

  8. WCF Restful Service

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

  9. WCF Restful Service的服务

    构建基于WCF Restful Service的服务 前言 传统的Asmx服务,由于遵循SOAP协议,所以返回内容以xml方式组织.并且客户端需要添加服务端引用才能使用(虽然看到网络上已经提供了这方面 ...

随机推荐

  1. &lt&semi;&excl;--&lbrack;if IE 9&rsqb;&gt&semi;&period;&period;&period;&period;&lt&semi;&excl;end if--&gt&semi;

    1.页面里面经常看到类似[if it IE 9],表示的是限定某些浏览器版本才能执行的语句. ! [if ! IE] 含义:如果不是IE It [if it IE 9] 含义:如果是IE9 Ite [ ...

  2. EF的泛型封装 写的很好 转自Fly&lowbar;Elephant http&colon;&sol;&sol;www&period;cnblogs&period;com&sol;xiaofeixiang&sol;p&sol;4188600&period;html&quest;utm&lowbar;source&equals;tuicool

    Entity Framework本身的增删改查其实 已经很方便了,不过做项目的时候用的多了也就觉得有点累了,每个业务实体基本上都涉及到到了增删改查这四个基本的要素,至于封装每个公司可能都不一样,接口, ...

  3. Java 制作证书的工具keytool用法总结

    一.keytool的概念 keytool 是个密钥和证书管理工具.它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务.在 ...

  4. tomcat启动报错

    [toc]启动错误 does not exist or is not a readable directory 问题:tomcat启动报错:does not exist or is not a rea ...

  5. JQuery如何实现双击事件时不触发单击事件

    单击和双击事件的执行顺序: 单击(click):mousedown,mouseout,click: 双击(dblclick):mousedown,mouseout,click , mousedown, ...

  6. Codeforces Round &num;324 &lpar;Div&period; 2&rpar; E

    这题贪心,考虑先放第一个,然后从第一个数在p中的位置, 不断的往前走,和在他后面的那些数组进行交换,因为这样交换可以提高最大的效率,就是说你花费了1但是使得两个点都朝他的木匾节点减少了1 #inclu ...

  7. Python【unittest】模块

    [unittest]模块是python3.5中的一个内置模块 1.python文件导入[unittest]模块 import unittest 2.定义一个测试用例类,继承[unittest.Test ...

  8. c&num;操作xml的代码&lpar;插入节点、修改节点、删除节点等&rpar;

    bookstore.xml文件内容: 复制代码代码示例: <?xml version="1.0" encoding="gb2312"?><bo ...

  9. PHP之string之str&lowbar;pad&lpar;&rpar;函数使用

    str_pad (PHP 4 >= 4.0.1, PHP 5, PHP 7) str_pad - Pad a string to a certain length with another st ...

  10. python爬虫之requests库

    在python爬虫中,要想获取url的原网页,就要用到众所周知的强大好用的requests库,在2018年python文档年度总结中,requests库使用率排行第一,接下来就开始简单的使用reque ...