Настройте параметры ClientWebSocket до вызова ConnectAsync. Сначала начать соединение, а потом назначить прокси — слишком поздно для этого рукопожатия.

using var socket = new ClientWebSocket();
socket.Options.Proxy = new WebProxy("http://203.0.113.10:8080")
{
    Credentials = new NetworkCredential(proxyUser, proxyPassword)
};
using var deadline = new CancellationTokenSource(TimeSpan.FromSeconds(20));
await socket.ConnectAsync(new Uri("wss://example.com/socket"),
                          deadline.Token);

Адреса и переменные учётной записи приведены для примера. Требуемые пространства имён включают System.Net, System.Net.WebSockets и System.Threading. Используйте тип учётных данных и механизм проверки подлинности, поддерживаемые средой выполнения, платформой и прокси-службой в вашем развёртывании.

Учётные данные WebProxy принадлежат прокси. У ClientWebSocketOptions также есть отдельное свойство Credentials для проверки подлинности сервера WebSocket. Назначение одного не удовлетворяет автоматически другую сторону.

При защищённом соединении WebSocket отклонённый туннель прокси может вообще не дать начаться рукопожатию WebSocket с назначением. Отделяйте свидетельства соединения и проверки подлинности прокси от ответа HTTP upgrade назначения и последующего трафика WebSocket.

Успешное соединение — лишь начало сеанса. Явно управляйте отменой приёма и отправки, а также очисткой ресурсов на протяжении всего времени жизни приложения; срок настройки в этом наброске не является полной политикой для каждого последующего сообщения.

Похожие статьи