2013-06-27 48 views
1

我在Web API自主主机上,我需要向客户端发送keep-alive:每个请求的关闭标头(每次都需要一个新连接)。我如何设置这个全局配置?Web API保持活动标头

回答

2

您可以使用HttpMessageHandler全局更改每个请求/响应。您正在查找的标题是Connection标题。由于某种原因,这个标题已经被暴露了一点。您不能直接设置Connection标题,您需要将ConnectionClose属性设置为true

创建一个类是这样的:

public class CloseConnectionHeader : 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; 
       }); 
     } 
    } 

,并把它添加到您的收藏的MessageHandler,

 config.MessageHandlers.Add(new CloseConnectionHandler()); 

我很好奇,你为什么会想这样做。我可以想象的唯一原因是,您期待成千上万的并发客户,每个客户只能在短时间内提出一个请求。是这样吗?否则,您可能会受到相当显着的性能影响。 Http.sys堆栈将在闲​​置2分钟后自动关闭连接,因此不会像连接泄漏一样。

+0

我正在使用X3DOM,一个JavaScript库,通过WebGL进行3D渲染。在一些请求之后,在div中内嵌新的X3D内容(CAD模型)似乎会导致内存泄漏(已知问题),并且净传输性能较低。我希望能够缓解这个最后的问题,打开一个新的连接。 – Jumpa