Configure as opções do ClientWebSocket antes de chamar ConnectAsync. Iniciar primeiro a ligação e atribuir o proxy depois é tarde demais para esse handshake.

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);

Os endereços e as variáveis de conta são ilustrativos. Os namespaces necessários incluem System.Net, System.Net.WebSockets e System.Threading. Utilize o tipo de credencial e o mecanismo de autenticação suportados pelo runtime, pela plataforma e pelo serviço de proxy na sua implementação.

As credenciais do WebProxy pertencem ao proxy. O ClientWebSocketOptions também tem uma propriedade Credentials separada para a autenticação do servidor WebSocket. Atribuir uma não satisfaz automaticamente a outra parte.

Numa ligação WebSocket segura, um túnel de proxy rejeitado pode impedir que o handshake WebSocket do destino comece. Separe as evidências de ligação e autenticação do proxy da resposta HTTP upgrade do destino e do tráfego WebSocket posterior.

Uma ligação bem-sucedida é apenas o início da sessão. Mantenha explícitos o cancelamento de receção/envio e a limpeza de recursos durante toda a vida da aplicação; o prazo de configuração neste esboço não é uma política completa para cada mensagem seguinte.

Artigos relacionados