使用多种客户端消费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 @   石曼迪  Views(1343)  Comments(0Edit  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
瓴域建设-环保事业中心
点击右上角即可分享
微信分享提示