我正在使用C#和WebSocket4Net庫構建安全的WebSockets客戶端。我希望我的所有連接都可以通過標準代理進行代理。如何在WebSocket4Net庫中使用代理服務器
這個庫使用SuperSocket.ClientEngine.Common.IProxyConnector
來指定一個websocket連接的代理,但我不知道我應該如何實現它。
有沒有人與這個圖書館合作,並可以提供一些建議?
我正在使用C#和WebSocket4Net庫構建安全的WebSockets客戶端。我希望我的所有連接都可以通過標準代理進行代理。如何在WebSocket4Net庫中使用代理服務器
這個庫使用SuperSocket.ClientEngine.Common.IProxyConnector
來指定一個websocket連接的代理,但我不知道我應該如何實現它。
有沒有人與這個圖書館合作,並可以提供一些建議?
我必須這樣做,通過Fiddler推送所有websocket連接,以便於調試。由於WebSocket4Net作者選擇重新使用他的IProxyConnector
界面,因此不能直接使用System.Net.WebProxy
。
在this link筆者建議使用其父母庫SuperSocket.ClientEngine
的實現,您可以從CodePlex上下載並同時包括SuperSocket.ClientEngine.Common.dll
和SuperSocket.ClientEngine.Proxy.dll
。 我不推薦這個。這會導致編譯問題,因爲他(很差)選擇使用相同的命名空間與ClientEngine
和WebSocket4Net
與在這兩個DLL中定義的IProxyConnector。
什麼工作對我來說:
爲了得到它通過提琴手工作進行調試,我複製這兩個類爲我的解決方案,並將其改爲本地命名空間:
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!");
}
這真的爲我節省了一些時間 - 謝謝! – fcrick
有沒有辦法使用此解決方案與代理進行身份驗證? –
在這裏獲得很多例外,一個接一個的關於代理,第一太多的數據,然後不兼容的協議,然後代理拒絕連接(又沒有返回狀態代碼2xx)...請更新答案? – Gizmo