使用多种客户端消费WCF RestFul服务(三)——.net4.5篇
.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 = "0001" }; 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 = "12", ID = "001", 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进行研究,希望大家继续关注。
本篇源代码下载:点击下载