首页 新闻 搜索 专区 学院

httpclient长连接问题

0
悬赏园豆:140 [待解决问题]

我在使用httpclient 发送数据的时候。 都是同一个主机,当第一个URL发送成功的时候,

我紧接着发送第二个URL请求,结果不是长连接。导致上传失败,请大家帮忙解决下:

private static readonly HttpClient _httpClient;
private static readonly string host = "https://funcpaasupgrade.abc.cn:10922";

static HttpClientTest()
{
_httpClient = new HttpClient() {BaseAddress = new Uri(host)};
_httpClient.DefaultRequestHeaders.ConnectionClose = false;
_httpClient.DefaultRequestHeaders.Connection.Add("keep-alive");
}

下面是执行2个URL

var response = await _httpClient.PostAsync("/upgrade/device/package/start?workId=2222", new StringContent(json));

return await response.Content.ReadAsStringAsync();

这个成功了,

// //问题就在这里 上传的时候链接断开了 重新一个新链接
var requestContent =
await _httpClient.PostAsync("/upgrade/device/package/" + startLength, new ByteArrayContent(buffer));
return await requestContent.Content.ReadAsStringAsync();

 

抓包的时候发现第一个URL请求带上了connection:close 请问如何解决 谢谢

~紫鱼~的主页 ~紫鱼~ | 初学一级 | 园豆:2
提问于:2017-06-30 12:19
< >
分享
所有回答(5)
0

http本来就不是长链接啊

hahanonym | 园豆:1460 (小虾三级) | 2017-06-30 13:20
0

建议确认一下请求第一个URL时,服务端响应头有没有返回 Connection:keep-alive 

dudu | 园豆:37751 (高人七级) | 2017-06-30 13:49

对方说我请求有Connection: close

支持(0) 反对(0) ~紫鱼~ | 园豆:2 (初学一级) | 2017-06-30 14:08

@~紫鱼~: 改为 _httpClient.DefaultRequestHeaders.Add("Connection", "keep-alive"); 试试

支持(0) 反对(0) dudu | 园豆:37751 (高人七级) | 2017-06-30 14:50
0

有这样的需求为什么不是用长连接的websocket,而是用短链接的http。http当然是发一次断一次了

飞鸿眉敛 | 园豆:256 (菜鸟二级) | 2017-06-30 15:22
0

http1.1的协议 默认是Connection:keep-alive 即使不指定也是保持会话连接 复用tcp连接

但connection:close  一般是 服务响应才会有这个,一般情况下只有服务器发生异常 才会指定返回 close 然后服务器关闭tcp 通知client 也顺便关闭。 

沐松 | 园豆:208 (菜鸟二级) | 2017-06-30 16:37

是的,问题已经找到了  需要清楚头部信息 再添加KEEP-ALIVE

支持(0) 反对(0) ~紫鱼~ | 园豆:2 (初学一级) | 2017-07-03 09:06
0

解决办法:1. 清除头部信息

_httpClient.DefaultRequestHeaders.Connection.Clear();
_httpClient.DefaultRequestHeaders.ConnectionClose = false;

2. 服务器开启HTTP1.1协议

 

就可以了

~紫鱼~ | 园豆:2 (初学一级) | 2017-07-03 09:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册