C# 如何收听keep alive HttpResponseMessage,直到它';什么时候关门?

C# 如何收听keep alive HttpResponseMessage,直到它';什么时候关门?,c#,keep-alive,dotnet-httpclient,C#,Keep Alive,Dotnet Httpclient,我正在使用HttpClient向远程web服务器发送一个异步POST请求。远程web服务器响应时,连接头设置为保持活动状态。最终,它将关闭连接 我不知道该怎么做,就是一直接收数据,直到连接被设置为关闭 例如,考虑下面的代码: HttpClient client = new HttpClient(); string requestUri = ...; //My GET uri string content = ...; //url-encoded contents of the request

我正在使用
HttpClient
向远程web服务器发送一个异步POST请求。远程web服务器响应时,连接头设置为
保持活动状态
。最终,它将关闭连接

我不知道该怎么做,就是一直接收数据,直到连接被设置为关闭

例如,考虑下面的代码:

HttpClient client = new HttpClient();
string requestUri = ...; //My GET uri
string content = ...; //url-encoded contents of the request

HttpResponseMessage response = await client.PostAsync(requestUri, new StringContent(content));
在上面的代码中,
响应
将把
连接
标题设置为
保持活动
。我在上找不到任何成员,这些成员似乎给了我在收到第一个
保持活动
后继续接收信息的任何方法

在连接关闭之前,我不知道如何继续接收响应。

我能够找到处理发送
keep-alive
请求的各种资源。那不是我的问题。我的问题是从服务器接收/处理
保持活动状态
响应


请让我知道我是否可以提供更多信息来改进此问题。

如果您只想收到对给定请求的响应,您根本不需要处理keep alive。Keep alive纯粹是一种性能优化。该框架透明地管理连接

您所要做的就是发送请求并接收响应。每个请求只有一个响应


一方最终会关闭与您无关的连接。您不会注意到任何影响。

连接:保持活动状态
目的不是让服务器为同一个请求发送多个响应-这将从根本上违反HTTP的工作方式


Connection:keep-alive
是服务器向客户端发送信号的方式,表明客户端可以使用相同的、已经建立的TCP连接提交下一个请求,从而帮助避免建立新连接(可能还有TLS握手)的成本

连接的重用(通常)由底层库处理,并被抽象掉,这样库的用户(如开发人员)就不必担心处理问题

您所要做的就是不断发出尽可能多的
client.Post/Get/etc
请求,
HttpClient
库将负责管理底层TCP连接及其重用


HTTP中有一个区域看起来可能与上述内容相反,因此令人困惑,但事实并非如此。这种情况是服务器返回HTTP状态
100 Continue
。在这种情况下,您将看到来自服务器的另一个响应仍然是相同的原始请求(我所说的“see”不是指来自
HttpClient
,而是指如果您要使用WireShark或代理之类的工具进行窥探,则在线路上)。在这种情况下,如果客户机发出一个大请求,服务器只需向客户机发出信号,表示它正在继续接受和读取请求,并让客户机继续发送原始请求。收到完整请求后,服务器将处理并响应最终响应代码和消息。同样,
HttpClient
将抽象掉这个临时的
100继续
响应,这样开发者就不必担心它(在大多数情况下,如果不是所有情况下)。

不确定我是否误解了你的问题,但是一旦你发布请求并得到响应,这个循环(请求/响应)就完成了,没有更多的数据可从服务器接收。@ManyRootsofAllEvil您所说的是真的。如果服务器响应为
连接:保持活动状态
,则表示从服务器到客户端的连接尚未关闭。在连接关闭之前,我需要继续接收响应。@您是说您收到了对原始请求的部分响应吗?或者您正在询问如何从同一连接上的连续请求接收响应?@LB2在服务器指示连接关闭之前,我如何继续从服务器接收响应?我希望此功能实际上位于
HttpClient
上,但我找不到一种机制。一旦满足您的请求,服务器将不会发送更多响应,因为它没有任何响应。是什么让您如此担心服务器上打开的连接?感谢您的详细解释。这个问题源于对Keep Alive的误解和我的疏忽。@crush谢谢,我更新了答案,补充了关于状态代码
100
的怪癖,这可能与答案所说的相反,但实际上并非如此。非常酷。谢谢你提供的这些额外信息。我总是想知道引擎盖下发生了什么。谢谢。这有助于澄清我对Keep Alive重要性的误解。