7

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

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

我尝试使用 ServicePointManager 禁用 KeepAlive,但这并没有改变任何东西。传出连接仍然有它的“connection: keep-alive”HTTP 标头,并且服务器保持 TCP 连接打开。我还尝试将 GetWebRequest 覆盖添加到由 VS 创建的代理类中,该代理类继承自 SoapHttpClientProtocol,但我仍然看到 keep-alive 标头。

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

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

客户端是用 C# 编写的(服务器也是如此),并使用指向负载均衡器的 Web 引用(不是服务引用)。

4

1 回答 1

9

没有覆盖GetWebRequest方法工作:

protected override WebRequest GetWebRequest(Uri uri)
{
    var webRequest = (HttpWebRequest)base.GetWebRequest(uri);
    webRequest.KeepAlive = false;
    return webRequest;
}
于 2010-03-23T21:35:08.633 回答