.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,添加对组建的引用:

注意:这里光引用上面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/

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

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

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,我们断点调试抓图如下:

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

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

最新文章

  1. 使用nodejs爬取拉勾苏州和上海的.NET职位信息
  2. 基于Emgu CV的人脸检测代码
  3. Java多线程20:多线程下的其他组件之CountDownLatch、Semaphore、Exchanger
  4. HTML5拖拽实例
  5. Android -- 重设字符并统计原字符以及修改字符的长度以及位置
  6. ORACLE 分区表简介
  7. 如何在Eclipse中配置Tomcat服务器
  8. careercup-中等难度 17.12
  9. 《图解密码技术》-chaper1-概述
  10. TOJ1693(Silver Cow Party)
  11. javascript 延时执行函数
  12. linux----------centos下添加环境变量
  13. JSF生存指南P1
  14. 【Android】Android 代码判断是否获取ROOT权限(一)
  15. core net 2 nuget的数据源包
  16. spring-boot 实现文件上传下载
  17. 18、利用 Windows Device Portal 获取用户闪退 dump
  18. github上手实践教程
  19. new的三种形态
  20. shred_linux_unix

热门文章

  1. POJ 1523 (割点+连通分量)
  2. This function has none of DETERMINISTIC, NO SQL 解决办法
  3. TYVJ P1030 乳草的入侵 Label:跳马问题
  4. TYVJ P1075 硬币游戏 Label:dp
  5. 【TYVJ】1467 - 通向聚会的道路(spfa+特殊的技巧)
  6. WebRTC手记之WebRtcVideoEngine2模块
  7. HDU 4605 Magic Ball Game(离线算法)
  8. Qt中QUdpSocket序列化问题
  9. WPF 中Frame + Page 的使用
  10. linux进程用户内存空间和内核空间