【问题标题】:Web API keep-alive headerWeb API 保持活动标头
【发布时间】:2013-06-24 16:46:25
【问题描述】:

我在 Web API 自托管上,我需要向客户端发送一个 keep-alive: close 每个请求的标头(我每次都想要一个新连接)。如何设置此全局配置?

【问题讨论】:

    标签: c# .net asp.net-web-api http-headers keep-alive


    【解决方案1】:

    您可以使用 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 分钟不活动后自动关闭连接,因此您不会泄漏连接。

    【讨论】:

    • 我正在使用 X3DOM,这是一个通过 WebGL 进行 3D 渲染的 Javascript 库。在一些请求之后,在 div 中内联新的 X3D 内容(CAD 模型)似乎会导致内存泄漏(已知问题)和网络传输性能低下。我希望减轻打开新连接的最后一个问题。
    猜你喜欢
    • 2013-10-19
    • 2018-01-27
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    相关资源
    最近更新 更多