使用 .Net ClientWebSocket 从 WebSocket 获取数据
Posted
技术标签:
【中文标题】使用 .Net ClientWebSocket 从 WebSocket 获取数据【英文标题】:Get Data from WebSocket using .Net ClientWebSocket 【发布时间】:2016-12-28 07:53:25 【问题描述】:我需要从 WebSocket 收集数据。
如果我尝试使用此站点测试 websocket:http://www.websocket.org/echo.html 我可以毫无问题地连接和发送消息,但是当我尝试使用 .Net Framework 库连接到 websocket 时,我得到:
System.Net.WebException:内部服务器错误 (500)。
我用来连接的代码是这样的:
string uri = "wss://wss.xxx.xxx";
ClientWebSocket webSocket = null;
try
webSocket = new ClientWebSocket();
await webSocket.ConnectAsync(new Uri(uri), CancellationToken.None);
await Task.WhenAll(Receive(webSocket), Send(webSocket));
catch (Exception ex)
Console.WriteLine("Exception: 0", ex);
如果我尝试连接到任何其他网络套接字,代码运行良好...
与其他websocket的不同之处在于地址以“wss”而不是“ws”开头(认为是因为安全连接)。
如果我使用 Chrome 之类的浏览器进行测试,websocket 连接可以工作,但不能在 .Net 中,我是否必须添加一些标头才能模拟浏览器代理?
感谢支持
【问题讨论】:
我已经用 ws://echo.websocket.org 尝试了你的代码,它工作正常。 嗨 Memmet,是的,它适用于 ws://echo.websocket.org 但不适用于我必须使用的 websocket。 嗨 Memmet,是的,它适用于 ws://echo.websocket.org,但不适用于我必须使用的 websocket。如果你检查我的答案,现在我可以连接了,我只需要添加一些标题,握手就可以了...... 【参考方案1】:最后经过一番搜索,我发现了问题:我只需要向 ClientWebSocket 添加标头。
问题是 ClientWebSocket 没有提供添加特定头的方法,我不得不发力 ClientWebSocket。
这个帖子帮我解决了很多问题:
Setting "User-Agent" HTTP header in ClientWebSocket
使用这个新版本的 ClientWebSocket 我能够添加标头。
【讨论】:
以上是关于使用 .Net ClientWebSocket 从 WebSocket 获取数据的主要内容,如果未能解决你的问题,请参考以下文章
使用 ClientWebSocket .net 核心测试 TestHost.WebSocketClient
使用 LXD REST API,ClientWebSocket 在 .Net Core 上抛出“AuthenticationException”,但在 .Net Framework 上,它运行良好
.Net Core ClientWebSocket:无法连接到服务器