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

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
  • 不要手动用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:55:08