近日在系统中集成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。

 

解决 .net HttpClient 调用时出现的 "A task was cancelled" 错误的更多相关文章

  1. 解决导入Android例子时“Unable to resolve target 'android-x' ”的错误

    今天导入一个Android的例子程序,出现了Unable to resolve target 'android-2' 的错误. 最后google之后才发现原来是 ADK版本 :---API Level ...

  2. 解决Delphi 2010启动时卡死并报“displayNotification: 堆栈溢出”错误

    1. 清理IE的历史记录,删除浏览器缓存(不需要清cookie) 2. 禁用startpage 2.1 从 Delphi 2010 启动菜单上点右键 -> 查看属性->快捷方式->目 ...

  3. 解决yum安装 openssl-devel时产生的Multilib version problems found错误(转)

    Error: Multilib version problems found. This often means that the root cause is something else and m ...

  4. 解决Delphi 2010启动时卡死并报displayNotification堆栈溢出错误

    1. 清理IE的历史记录,删除浏览器缓存(不需要清cookie) 2. 禁用startpage 2.1 从 Delphi 2010 启动菜单上点右键 -> 查看属性->快捷方式->目 ...

  5. 使用httpClient 调用get,Post接口

    1.httpClient 调用get接口 private async Task<IList<(int columnId, string columnName)>> GetFun ...

  6. Feign调用时读取超时(Read timed out executing GET)解决

    解决方式(很多人比较关注,所以放在最前面): 因为Feign调用默认的超时时间为一分钟,一分钟接口不能返回就会抛出异常,所以在服务端的yml文件中增加如下配置即可解决: # feign调用超时时间配置 ...

  7. 使用XmlInclude解决WebService调用时无法识别子类的异常

    一.定义抽象类及子类,WebMethod实际返回子类参数 //使用XmlInclude解决WebService调用时无法识别子类的异常 [System.Xml.Serialization.XmlInc ...

  8. Web Service 或 WCF调用时读取 XML 数据时,超出最大字符串内容长度配额(8192)解决方法

    1.调用服务时服务 当我们使用 Web Service 或 WCF 服务时,常把读取的数据转化为string类型(xml格式),当数据量达到一 定数量时,会出现以下异常: 错误:格式化程序尝试对消息反 ...

  9. 浅谈,seata在使用feign-url通过域名调用时分布式事务不生效的问题及解决

    浅谈,seata在使用feign-url通过域名调用时分布式事务不生效的问题及解决 ​ 在前几个月时,我们项目出现了分布式事务的问题,那么什么是分布式事务问题呢,简单的说,我们有俩服务A和B,它们对应 ...

随机推荐

  1. struts2 文件下载的处理

  2. @RequestBody 和@ResponseBody 注解详解

    简介: @RequestBody 作用: i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对 ...

  3. move_base的全局路径规划代码研究

    algorithmn parameter code 主要是以下三个函数 计算所有的可行点 怎么计算一个点的可行点 从可行点中计算路径path todo algorithmn 算法的解释 Dijkstr ...

  4. selenium测试 - open Firefox

    环境:Python2.7+selenium3+Firefox47   问题1: 在打开火狐浏览器时报错:‘geckodriver‘ executable needs to be in PATH fro ...

  5. 安装好dashboard 登录出现错误

    验证发生错误.请稍后再试一次. While turning SELinux off certainly does the trick, it is somewhat like using a sled ...

  6. windows下MySQL 5.7+ 解压缩版安装配置方法--转载

    方法来自伟大的互联网. 1.去官网下载https://dev.mysql.com/downloads/mysql/.zip格式的MySQL Server的压缩包,根据需要选择x86或x64版.注意:下 ...

  7. TersorflowTutorial_MNIST数据集上简单CNN实现

    MNIST数据集上简单CNN实现 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 Tensorflow机器学习实战指南 源代码请点击下方链接欢迎加星 Tesorflow实现基于MNI ...

  8. springsecurity basic 认证

    Basic Access Authentication scheme是在HTTP1.0提出的认证方法,它是一种基于challenge/response的认证模式,针对特定的realm需要提供用户名和密 ...

  9. Flex布局之box-flex

    box-flex的写法比flex的写法要复杂一些,兼容性的前缀要多带几个,真希望有一天flex布局能够纳入w3c标准啊! <!DOCTYPE html> <html> < ...

  10. css各种姿势的水平居中

    首先是最常用的,利用margin属性的auto来进行水平居中 margin: 0 auto; 其中0是指上下的margin,auto是左右的margin,margin这个属性的简写是按顺时针走的,也就 ...