You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ClientWebSocket ConnectAsync协议异常:URL格式冲突问题求助

ClientWebSocket连接异常的解决方法

问题重现

你的代码:

using (ClientWebSocket socket = new ClientWebSocket())
{
    Uri serverUri = new Uri("wss://localhost:5079");
    socket.ConnectAsync(serverUri, CancellationToken.None);
}

调用ConnectAsync时抛出异常:

System.InvalidOperationException: 'Unrecognized scheme in server address 'ws://localhost:5079'. Only 'http://' and 'https://' are supported.'

但改用http/https格式的URL,程序又提示必须使用ws/wss协议。

核心问题与解决

1. 异步方法未等待(必改)

ConnectAsync是异步方法,你没加await会导致using块提前释放ClientWebSocket对象,直接引发异常或连接失败。不管用哪个.NET版本,都必须加上await。

2. 不同.NET版本的Uri协议支持差异

  • 如果用的是.NET Framework:
    ClientWebSocket不直接支持ws/wss协议的Uri,需要改用对应http/https的Uri(ws对应http,wss对应https),同时可按需设置WebSocket子协议:

    using (ClientWebSocket socket = new ClientWebSocket())
    {
        Uri serverUri = new Uri("https://localhost:5079"); // wss对应https,ws对应http
        socket.Options.AddSubProtocol("websocket"); // 按需添加,部分服务器要求
        await socket.ConnectAsync(serverUri, CancellationToken.None);
    }
    
  • 如果用的是.NET Core/.NET 5+:
    直接支持ws/wss协议的Uri,只需补加await即可:

    using (ClientWebSocket socket = new ClientWebSocket())
    {
        Uri serverUri = new Uri("wss://localhost:5079");
        await socket.ConnectAsync(serverUri, CancellationToken.None);
    }
    

补充说明

你看到的异常里显示的是ws://localhost:5079,但代码里写的是wss,应该是测试时切换过协议导致的,本质还是协议格式和异步方法未等待的问题。

内容的提问来源于stack exchange,提问作者Jacopo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:16:06