Как отключить поддержку активности на клиентских запросах веб-службы ASP.NET? - PullRequest
7 голосов
/ 24 марта 2010

У меня есть несколько веб-серверов за балансировщиком нагрузки Amazon EC2. Я использую балансировку TCP на порту 80 (а не балансировку HTTP).

У меня есть клиент, опрашивающий веб-сервис (работающий на всех веб-серверах) для новых элементов каждые несколько секунд. Однако клиент, похоже, остается подключенным к одному серверу и каждый раз опрашивает тот же сервер.

Я пытался использовать ServicePointManager, чтобы отключить KeepAlive, но это ничего не изменило. Исходящее соединение все еще имело свой HTTP-заголовок «connection: keep-alive», и сервер оставлял TCP-соединение открытым. Я также попытался добавить переопределение GetWebRequest к прокси-классу, созданному VS, который наследуется от SoapHttpClientProtocol, но я все еще вижу заголовок keep-alive.

Если я убью процесс клиента и перезапущу его, он подключится к новому серверу через балансировщик нагрузки, но продолжит опросить этот новый сервер навсегда.

Есть ли способ заставить его каждый раз подключаться к случайному серверу? Я хочу, чтобы нагрузка от одного клиента была распределена по всем веб-серверам.

Клиент написан на C # (как и сервер) и использует веб-ссылку (не ссылку на службу), которая указывает на балансировщик нагрузки.

1 Ответ

9 голосов
/ 24 марта 2010

Не переопределяет метод GetWebRequest , работающий:

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