使用多种客户端消费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,添加对组建的引用:

image

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

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

image

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

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异步方法,返回的数据可以直接使用。

最终调用结果如:

image

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

image

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

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

posted @ 2013-12-04 22:18  石曼迪  Views(1342)  Comments(0Edit  收藏  举报
瓴域建设-环保事业中心