Ho dovuto fare lo stesso, per spingere tutte le connessioni websocket tramite Fiddler, per facilitare il debugging. Poiché l'autore di WebSocket4Net ha scelto di riutilizzare la sua interfaccia IProxyConnector
, System.Net.WebProxy
non è direttamente utilizzabile.
Sulla this link l'autore suggerisce di utilizzare le implementazioni dalla sua biblioteca genitore SuperSocket.ClientEngine
che può essere scaricato da CodePlex e comprendono sia il SuperSocket.ClientEngine.Common.dll
e SuperSocket.ClientEngine.Proxy.dll
. Non lo consiglio. Questo causa problemi di compilazione perché (scarsamente) ha scelto di utilizzare lo stesso spazio dei nomi con entrambi ClientEngine
e WebSocket4Net
con IProxyConnector definito in entrambe le DLL.
cosa ha funzionato per me:
per farlo funzionare per il debugging tramite Fiddler, ho copiato queste due classi nella mia soluzione, e cambiato in spazio dei nomi locale:
HttpConnectProxy sembrava avere un bug sul seguente riga:
if (e.UserToken is DnsEndPoint)
modifica:
if (e.UserToken is DnsEndPoint || targetEndPoint is DnsEndPoint)
Dopo di che, le cose funzionavano bene. Esempio di codice:
private WebSocket _socket;
public Initialize()
{
// initialize the client connection
_socket = new WebSocket("ws://echo.websocket.org", origin: "http://example.com");
// go through proxy for testing
var proxy = new HttpConnectProxy(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888));
_socket.Proxy = (SuperSocket.ClientEngine.IProxyConnector)proxy;
// hook in all the event handling
_socket.Opened += new EventHandler(OnSocketOpened);
//_socket.Error += new EventHandler<ErrorEventArgs>(OnSocketError);
//_socket.Closed += new EventHandler(OnSocketClosed);
//_socket.MessageReceived += new EventHandler<MessageReceivedEventArgs>(OnSocketMessageReceived);
// open the connection if the url is defined
if (!String.IsNullOrWhiteSpace(url))
_socket.Open();
}
private void OnSocketOpened(object sender, EventArgs e)
{
// send the message
_socket.Send("Hello World!");
}
Questo mi ha davvero salvato un po 'di tempo - grazie! – fcrick
C'è un modo per autenticarsi con il proxy con questa soluzione? –
Qui ci sono molte eccezioni, una dopo l'altra sul proxy, prima troppi dati, quindi protocolli incompatibili, quindi il proxy ha rifiutato la connessione (ovvero non ha restituito il codice di stato 2xx) ... Si prega di aggiornare la risposta? – Gizmo