2016-08-23 48 views
9

Moim celem jest wykorzystanie implementacji klienta WebSocket .Net (tj. Nie przeglądarki) do łączenia się z WebSocket przez firmowy serwer proxy, który wymaga uwierzytelnienia NTLM. Jak dotąd wszystkie rozwiązania (np. Websocket-sharp-with-proxy, websocket4net) są krótkie.Jak korzystać z klienta .NET WebSocket z serwerami proxy NTLM?

Próbowałem te:

How to use proxies with the WebSocket4Net library

https://stackoverflow.com/a/2587330/573261

O ile mi wiadomo, autor nie uaktualnili tę dyskusję na dodanie wsparcia NTLM proxy. http://websocket4net.codeplex.com/discussions/448172

to pytanie próbowali zapytać dlaczego implementacje klient nie obsługuje serwery proxy, ale nie odpowiedział i nie rzucają nowe światło na każdą dlaczego nikt nie chce podejść do problemu.

Wracając do mojego pytania, w jaki sposób można wykorzystać technologię WebSocket w aplikacji klienckiej za serwerem proxy NTLM?

+0

jakie są używane do stosu HTTP http. Większość stosów Windows (na przykład WinInet, WinHTTP) będzie już obsługiwać NTLM. – Adrien

+0

@Adrien Coś w stylu 'new WebSocket (" ws: //echo.websocket.org ", origin:" http://example.com ");' ale to nie bierze proxy NTLM jako parametru . Wspomniane biblioteki również zostały wypróbowane i niezależnie od tego, czego używają wewnętrznie. – RichardTheKiwi

+0

Czy mógłbyś wspomnieć, że jest to jak samodzielny proces serwisowy lub bardziej jak aplikacja komputerowa, na którą osoba jest zalogowana i uruchamiająca aplikację z poświadczeń? –

Odpowiedz

2

Obiekt znajdujący się w System.Net.WebSockets zawiera właściwość Options, która umożliwia konfigurowanie ustawień proxy.

var ws = new System.Net.WebSockets.ClientWebSocket(); 
await ws.ConnectAsync(new Uri("destination.com"), CancellationToken.None); 
ws.Options.Proxy = new WebProxy("example.com") 
{ 
    Credentials = new NetworkCredential("userName", "password") 
}; 

Przedmiotem NetworkCredential służy do uwierzytelniania opartego hasło i może dostarczyć to, czego potrzebujesz. Możesz także spróbować ustawić wartość Credentials na właściwości Options obiektu WebSocket w ten sposób, jeśli powyższe nie działa.

ws.Options.Credentials = new NetworkCredential("userName", "password"); 

nie mam dostępu do tego typu środowiska, więc nie faktycznie próbowałem, co chce zrobić, i nie jestem pewien, czy to pomoże. Ale wygląda na to, że zadziała to dla mnie.