近日在系统中集成ElasticClient客户端,自动创建索引、删除索引,发现通过 ElasticClient 的 LowerLevelClient 无法正确返回结果,但是索引已成功创建或删除。

并会在超时时间呢抛出异常”A task was cancelled“,查阅官方文档和Google都无解。

早上重新尝试,改用HttpClient直接进行访问,依然是一样的问题。

无奈,祭出Fiddler,进行请求分析。

1)使用Composer模拟请求,最简单的GET操作,居然也不能立即返回结果

2)使用浏览器直接访问,能够正确返回结果

3)比较Http 请求头,Fiddler 请求头基本都是空的,从浏览器复制Fiddler的请求头过来,最终发现,加上下面的请求头,就能正确返回结果:

Accept-Encoding: gzip, deflate

4)对应HttpClient来说,就可以用下面的方法解决了

HttpClientHandler handler = new HttpClientHandler()
{
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
}; var httpClient = new HttpClient(handler)
{
BaseAddress = new Uri($"http://{es_host}:{es_port}")
};

使用这个HttpClient再去访问ElasticSearch,立即就能返回结果。

问题分析:服务器端默认情况下返回结果就会使用Gzip压缩,但是客户端默认不处理数据解压,就导致客户端读取数据时,无法判断数据是否已经读取完毕,就一直挂起,直到超时,然后抛出”A task was canceled" 错误。

HttpClient 其他的 “A task was Canceled” 错误,很可能也是因为Http头设置不正确造成的,而服务器对客户端特性有要求,如本例的Gzip。

 

最新文章

  1. 背后的故事之 - 快乐的Lambda表达式(一)
  2. 安卓中的Model-View-Presenter模式介绍
  3. Surprise团队第三周项目总结
  4. mysql select 格式化输出
  5. Http返回码
  6. c# Linq及Lamda表达式应用经验之 GroupBy 分组
  7. strtok、strtok_s、strtok_r 字符串切割函数
  8. js实现数组去重并且显示重复的元素和索引值
  9. .9-浅析webpack源码之NodeEnvironmentPlugin模块总览
  10. 【并发编程】一个最简单的Java程序有多少线程?
  11. linux权限字母的含义
  12. Python之AJAX
  13. HTTP status constants
  14. springboot+thymeleaf简单使用
  15. 开源CFD并非万金油
  16. SpringMVC由浅入深day01_8springmvc和mybatis整合
  17. Android - fragment之间数据传递
  18. FullCalendar Timeline View 使用
  19. MVC日期格式化,后台使用Newtonsoft.Json序列化日期,前端使用”f”格式化日期
  20. 说说 PADS Layout 中的第 20 层和 第 25层

热门文章

  1. 「Python」pandas入门教程
  2. SQL Server 2008如何开启数据库的远程连接
  3. 在使用Hibernate save()方法的时候 报错: org.hibernate.exception.ConstraintViolationException:could not perform addBath
  4. Codechef Observing the Tree
  5. select表单元素详解及下拉列表模拟实现
  6. ASP.Net Web 服务 – 如何使用会话状态
  7. [POJ2356]Find a multiple 题解(鸽巢原理)
  8. 【leetcode 简单】第二十三题 二叉树的最大深度
  9. 如何写出优雅的js以及js特殊技巧
  10. spring boot 加载原理