• 使用多种客户端消费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~~~了。

    本篇代码下载:点击

  • 相关阅读:
    Max Sum Plus Plus HDU
    Monkey and Banana HDU
    Ignatius and the Princess IV HDU
    Extended Traffic LightOJ
    Tram POJ
    Common Subsequence HDU
    最大连续子序列 HDU
    Max Sum HDU
    畅通工程再续
    River Hopscotch POJ
  • 原文地址:https://www.cnblogs.com/madyina/p/3458412.html
Copyright © 2020-2023  润新知