首页 > 其他 > 详细

深入学习HttpClient(一)扩展额外的功能

时间:2014-05-01 01:53:21      阅读:430      评论:0      收藏:0      [点我收藏+]

HttpClient作为.net4.5新增的Http库除了对于async/await形式的异步支持外,还向我们展示了其强大的扩展能力。

   

【类库的设计】

   

让我们先看下Httpclient的设计图:

   bubuko.com,布布扣

   

 

   

图中我们可以清晰的看出对于HttpClient库而言其请求的过程:

从Request发起,经过DelegatingHanlder处理后,进入InnerHandler,数据返回后再从Inner Handler 返回到Delegating Hanlder进行处理,最后返回结果。

   

从设计角度来讲,HttpClient库提供了强大的扩展性,使用者不需要任何继承即可完成对HttpClient的扩展(如果对设计模式熟悉,可以清楚的看出这里用到了装饰器模式)

   

先让我们来看一段实际的代码宏观的对HttpClient很方便的扩展有更具体的认识:

我们首先通过代码给Httpclient加一个DebugLog功能:

   

那么我们需要按下面的方式来定义:

   

bubuko.com,布布扣

   

   

bubuko.com,布布扣

   

   

上面代码的几点说明:

   

1、对于HttpClient这个类而言,其本身并不会进行实际的网络请求收发处理,我们应将其理解成一个容器、一个中继者,实际的网络请求核心在HttpClientHanlder中,也就是前面图中对应的Inner Handler。

2、我们自己定义了一个LoggingHandler,这个类对应Delegating Handler 是我们自定义的、装饰在Inner Handler外的Handler

3、DelegatingHandler重载了SendAsync,在其内部调用了InnerHandler的SendAsync方法,如此我们便可以在实际请求发出,以及返回后进行各种统一的处理,总结起来仍是上面图中画出的,逐层调用。

   

一个例子可能不足以让人理解透彻,我们可以展开思路,为httpClient定制出更多的功能,比如下面的例子:

为httpClient扩展出失败重试的逻辑:实际使用方式

   

bubuko.com,布布扣

   

   

在实际使用过程中我们可以定义一个方法来统一配置httpClient:

   

bubuko.com,布布扣

   

   

1、注意自定义的Handler的执行顺序,是从左往右依次调用

   

可以更深入的参考下面的文章:http://chimera.labs.oreilly.com/books/1234000001708/ch14.html

【总结】

   

HttpClient这一套类库的设计相比之前而言非常的精妙,可以作为典型的设计模式教材了,而在实际开发过程中也为每个开发人员提供了网络层架构的极大遍历,如果你要与.net4.5打交道,那么是时候更新你的工具箱了

深入学习HttpClient(一)扩展额外的功能,布布扣,bubuko.com

深入学习HttpClient(一)扩展额外的功能

原文:http://www.cnblogs.com/tianhonghui/p/3700869.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!