C# と WebSocket4Net ライブラリを使用して、安全な WebSocket クライアントを構築しています。すべての接続を標準のプロキシ経由でプロキシしたいと考えています。
このライブラリは を使用しSuperSocket.ClientEngine.Common.IProxyConnector
て websocket 接続のプロキシを指定しますが、それをどのように実装すればよいかわかりません。
誰かがこのライブラリを使用しており、アドバイスを提供できますか?
C# と WebSocket4Net ライブラリを使用して、安全な WebSocket クライアントを構築しています。すべての接続を標準のプロキシ経由でプロキシしたいと考えています。
このライブラリは を使用しSuperSocket.ClientEngine.Common.IProxyConnector
て websocket 接続のプロキシを指定しますが、それをどのように実装すればよいかわかりません。
誰かがこのライブラリを使用しており、アドバイスを提供できますか?
デバッグを容易にするために、Fiddler を介してすべての websocket 接続をプッシュするために、同じことをしなければなりませんでした。IProxyConnector
WebSocket4Net の作成者は自分のインターフェイスを再利用することを選択したため、System.Net.WebProxy
直接使用することはできません。
このリンクでは、著者は、CodePlex からダウンロードして と の両方を含めることができる親ライブラリの実装を使用することを提案していSuperSocket.ClientEngine
ます。これはお勧めしません。これにより、コンパイルの問題が発生します。これは、両方の dll で定義された IProxyConnectorと両方で同じ名前空間を使用することを (不十分に) 選択したためです。SuperSocket.ClientEngine.Common.dll
SuperSocket.ClientEngine.Proxy.dll
ClientEngine
WebSocket4Net
私のために働いたもの:
Fiddler を使用してデバッグできるようにするために、これら 2 つのクラスをソリューションにコピーし、ローカル名前空間に変更しました。
HttpConnectProxy には、次の行にバグがあるようです。
if (e.UserToken is DnsEndPoint)
への変更:
if (e.UserToken is DnsEndPoint || targetEndPoint is DnsEndPoint)
その後、物事はうまくいきました。サンプルコード:
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!");
}