【发布时间】:2013-06-24 16:46:25
【问题描述】:
我在 Web API 自托管上,我需要向客户端发送一个 keep-alive: close 每个请求的标头(我每次都想要一个新连接)。如何设置此全局配置?
【问题讨论】:
标签: c# .net asp.net-web-api http-headers keep-alive
我在 Web API 自托管上,我需要向客户端发送一个 keep-alive: close 每个请求的标头(我每次都想要一个新连接)。如何设置此全局配置?
【问题讨论】:
标签: c# .net asp.net-web-api http-headers keep-alive
您可以使用 HttpMessageHandler 对每个请求/响应进行全局更改。您要查找的标头是 Connection 标头。由于某种原因,此标头的公开方式略有不同。您不能直接设置Connection 标头,您需要将ConnectionClose 属性设置为true。
像这样创建一个类:
public class CloseConnectionHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
return base.SendAsync(request, cancellationToken).ContinueWith(t =>
{
var response = t.Result;
response.Headers.ConnectionClose = true;
return response;
});
}
}
并将其添加到您的消息处理程序集合中,
config.MessageHandlers.Add(new CloseConnectionHandler());
我很好奇你为什么要这样做。我能想象的唯一原因是您期望有数千个并发客户端,每个客户端在任何短时间内只发出一个请求。是这样吗?如果没有,您可能会受到相当大的性能影响。 Http.sys 堆栈会在 2 分钟不活动后自动关闭连接,因此您不会泄漏连接。
【讨论】: