代码之家  ›  专栏  ›  技术社区  ›  Matt Brindley

如何在ASP.NET Web服务客户端请求上禁用保持活动状态?

  •  7
  • Matt Brindley  · 技术社区  · 16 年前

    我在AmazonEC2负载均衡器后面有几个Web服务器。我在端口80上使用TCP平衡(而不是HTTP平衡)。

    我有一个客户机每隔几秒钟为新项目轮询一个Web服务(在所有Web服务器上运行)。但是,客户机似乎保持与一台服务器的连接,并且每次轮询同一台服务器。

    我曾尝试使用ServicePointManager禁用Keepalive,但这并没有改变任何东西。传出连接仍有其“connection:keep-alive”HTTP头,服务器保持TCP连接打开。我还尝试将getwebrequest的重写添加到由vs创建的代理类中,该代理类继承自soaphttpclientprotocol,但我仍然看到keep-alive头。

    如果我终止客户端的进程并重新启动,它将通过负载均衡器连接到一个新服务器,但它将永远继续轮询那个新服务器。

    是否有方法强制它每次连接到随机服务器?我希望一个客户机的负载分布在所有Web服务器上。

    客户机是用C(和服务器一样)编写的,并使用指向负载均衡器的Web引用(而不是服务引用)。

    1 回复  |  直到 12 年前
        1
  •  9
  •   Jerome Darin Dimitrov    12 年前

    不会凌驾于 GetWebRequest 方法工作:

    protected override WebRequest GetWebRequest(Uri uri)
    {
        var webRequest = (HttpWebRequest)base.GetWebRequest(uri);
        webRequest.KeepAlive = false;
        return webRequest;
    }