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进行研究,希望大家继续关注。

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

  • 相关阅读:
    [APM] OneAPM 云监控部署与试用体验
    Elastic Stack 安装
    xBIM 综合使用案例与 ASP.NET MVC 集成(一)
    JQuery DataTables Selected Row
    力导向图Demo
    WPF ViewModelLocator
    Syncfusion SfDataGrid 导出Excel
    HTML Table to Json
    .net core 2.0 虚拟目录下载 Android Apk 等文件
    在BootStrap的modal中使用Select2
  • 原文地址:https://www.cnblogs.com/madyina/p/3458473.html
Copyright © 2011-2022 走看看