Postman无法连接容器中.NET应用的SignalR WebSocket请求怎么办?
解决SignalR WebSocket连接报错WRONG_VERSION_NUMBER的问题
这个错误的核心原因是你尝试用HTTPS(wss协议)连接一个仅提供HTTP(ws协议)服务的端点,或者端口映射对应错了协议端口。以下是具体解决步骤:
1. 检查Docker Compose端口映射配置
ASP.NET Core默认开发环境下,应用会同时监听两个端口:
- HTTP端口:5000
- HTTPS端口:5001
查看你的Docker Compose配置,确认主机端口5002映射的是容器的哪个端口:
- 如果映射的是容器的5000端口(HTTP),那么你应该用
ws://localhost:5002/myHub连接,而非wss://。 - 如果需要使用wss,需将容器的5001端口映射到主机的另一个端口(比如5003),然后用
wss://localhost:5003/myHub连接。
示例正确的端口映射配置:
services: your-app-service: image: your-app-image ports: - "5002:5000" # HTTP端口映射,对应ws协议 - "5003:5001" # HTTPS端口映射,对应wss协议
2. 验证应用的HTTPS配置
如果要使用wss协议,需确保应用正确启用了HTTPS:
- 检查Program.cs中是否包含
app.UseHttpsRedirection();(启用HTTPS重定向)。 - 开发环境下,确保已生成并信任开发证书:在主机执行
dotnet dev-certs https --trust,并确保容器能访问到证书(可通过挂载主机证书目录到容器实现)。
3. 修正Postman的连接方式
- 切换到Postman的WebSocket请求标签页,输入正确的协议URL:
- 用HTTP端口时输入
ws://localhost:5002/myHub - 用HTTPS端口时输入
wss://localhost:5003/myHub
- 用HTTP端口时输入
- 不要手动用GET请求访问
https://localhost:5002/myHub,SignalR的WebSocket连接需要特定的握手流程,Postman的WebSocket工具会自动处理。
4. 测试端点可达性
先通过HTTP/HTTPS请求验证端点是否正常:
- 访问
http://localhost:5002/myHub/negotiate(对应HTTP端口),如果返回包含connectionId的JSON响应,说明端点正常。 - 如果访问时出现SSL错误,说明你用错了协议端口,需调整URL或映射配置。
内容的提问来源于stack exchange,提问作者ctvanzandt42
相关产品推荐
相关产品推荐

