Как я могу отключить активный по клиентским запросам веб-сервиса ASP.NET?

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

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

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

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

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

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

7
задан Matt Brindley 23 March 2010 в 21:30
поделиться

1 ответ

Не отменяет работу метода GetWebRequest :

protected override WebRequest GetWebRequest(Uri uri)
{
    var webRequest = (HttpWebRequest)base.GetWebRequest(uri);
    webRequest.KeepAlive = false;
    return webRequest;
}
9
ответ дан 7 December 2019 в 03:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: