我在Web API自托管上,我需要为每个请求发送一个keep-alive: close头(每次我都想要一个新的连接)。如何设置此全局配置?
发布于 2013-06-27 21:45:30
您可以使用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分钟不活动后自动关闭连接,因此您不会泄漏连接。
https://stackoverflow.com/questions/17338819
复制相似问题