zoukankan      html  css  js  c++  java
  • 使用多种客户端消费WCF RestFul服务(二)——.net4.0篇

    .net 4.0篇

    在.net 4.0下面微软并没有提供类似Net.Http的Rest访问组件,而是在codeplex上面提供的WCF REST Starter Kit Preview 2 里面可以找到早期的版本,访问地址:http://aspnet.codeplex.com/releases/view/24644,这个问题在.net 4.5中得到明确支持和完美解决。那我们就从这个地址下载安装包进行安装,然后在C盘默认的路径下找到这几个DLL:“Microsoft.Http.dll”、“Microsoft.Http.Extensions.dll”准备添加到项目的引用中去。

    注意:本篇介绍的是基于接近0配置的实现方式,右键添加引用和非常庞大的配置的方法不在研究之列。

    上一篇中我们介绍了服务端如何去搭建,那么服务暂时就还是使用上一篇的。

    开发工具:Visual Studio 2013

    .net版本:4.0

    一、新建控制台程序:

    注意:WinForm、WebForm的方式将会一样。

    打开Visual Studio 2013新建控制台WCFRestFulClient4,添加对组建的引用:

    image

    最后一个是用来序列化和反序列化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种操作方法:

        public static void GetPerson()
            {
                var client = new HttpClient();
                var strUrl =baseUrl+ "GetPerson";
    
                var response = client.Get(strUrl);
                response.EnsureStatusIsSuccessful();
                var json = response.Content.ReadAsString();
                var data = JsonConvert.DeserializeObject<User>(json);
                Console.WriteLine(data);
            }
            //2  ok
            public static void GetPersonById()
            {
    
                var client = new HttpClient();
                var strUrl = baseUrl+"GetPersonById/1";
    
                var response = client.Get(strUrl);
                response.EnsureStatusIsSuccessful();
                var json = response.Content.ReadAsString();
                var data = JsonConvert.DeserializeObject<User>(json);
                Console.WriteLine(data);
            }
    
            //3  ok
            public static void GetPersonPost()
            {
                var task = new User { ID = "0001" };
                var client = new HttpClient();
                var strUrl = baseUrl+"GetPersonPost";
                var response = client.Post(strUrl, GetContent(task));
                response.EnsureStatusIsSuccessful();
                Console.WriteLine(response.Content.ReadAsString());
            }
    
            //4 ok
            public static void GetPersonPostById()
            {
                var task = new User { Age = "12", ID = "001", Name = "zhangsan" }; ;
                var client = new HttpClient();
                var strUrl = baseUrl+"GetPersonPostById";
                var response = client.Post(strUrl, GetContent(task));
                response.EnsureStatusIsSuccessful();
                Console.WriteLine(response.Content.ReadAsString());
    
            }

    解释:使用Get方式请求服务,只需一个参数就是URL,如果要带参在URL后面加,但是使用POST方式请求服务就需要一个HttpContent,这个HttpContent里面一般包含的是参数,如果服务端定义为接收JSON类型,那么这里就需要序列化参数为JSON类型,服务端默认会解析成对象,PUT和DELETE暂时不讨论。

    另附产生HttpContent的方式:

            private static HttpContent GetContent(User task)
            {
                var strContent = JsonConvert.SerializeObject(task);
                var data = System.Text.Encoding.UTF8.GetBytes(strContent);
                return HttpContent.Create(data, "application/json");
            }

    无论是哪种方式,都需要调用response.Content.ReadAsString();来获取响应字符串,然后根据实际情况去解析他。

    response.EnsureStatusIsSuccessful()的作用是检查响应的StatusCode。

    那么这4个方法写完,只需在main方法中调用即可出现结果,具体步骤为:先启动服务端ILongshi.BIZ:

    image

    然后启动客户端WCFRestFulClient4:

    image

    为了证实POST的参数能够传递过去,我们断点调试服务端:

    image

    既然参数传递到了,就可以NNN~~~了。

    本篇代码下载:点击

  • 相关阅读:
    图床_OpenStack-镜像服务
    图床_OpenStack-认证服务
    图床_OpenStack-基础环境
    #linux包之tcpdump之tcpdump命令
    利用OpenCms9提供的模块创建新站点
    Cocos2d-x3.0下实现循环列表
    Modbus读写模拟量寄存器具体解释
    C++ 实践总结
    spring Quartz基于配置文件和注解的实现
    EEPLAT学习
  • 原文地址:https://www.cnblogs.com/madyina/p/3458412.html
Copyright © 2011-2022 走看看