zoukankan      html  css  js  c++  java
  • 使用多种客户端消费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.NETASP.NET MVC 4AssembliesSystem.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进行研究,希望大家继续关注。

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

  • 相关阅读:
    添加或删除项并动态记录项的值
    练习题。对DOM中document的深刻理解巩固
    document--文档中的操作,操作属性、操作样式、操作元素
    10.13DOM中document--文档1找到元素的方法,还有元素内容属性
    函数的定义,语法,二维数组,几个练习题
    10.11讲的内容总结
    js基础巩固练习
    10.9做的一个静态页面(巩固前面的内容)
    9.29学习的js基础
    9.28做的作业(企业名称静态网页)
  • 原文地址:https://www.cnblogs.com/madyina/p/3458473.html
Copyright © 2011-2022 走看看