Azure Blazor应用中使用websocket-sharp遇连接关闭问题求助
问题根源与解决方案
核心问题:Azure App Service的端口限制
Azure App Service不允许应用直接监听自定义端口(如3333),所有外部流量都会通过平台负载均衡器转发到应用的80(HTTP)或443(HTTPS)端口,你的自定义端口3333无法被外部客户端访问,这是连接失败的主要原因。
具体修复步骤
1. 修改服务端端口配置
不要硬编码3333端口,改用Azure提供的环境变量获取应用监听端口,或直接绑定到平台默认端口:
// 推荐:使用环境变量获取Azure分配的端口 var port = int.Parse(Environment.GetEnvironmentVariable("HTTP_PLATFORM_PORT") ?? "80"); m_WSServer = new WebSocketServer(port, true); m_WSServer.AddWebSocketService<Laputa>("/Laputa");
2. 修正客户端连接地址
移除端口号3333,直接使用App Service域名,平台会自动处理端口转发:
m_WSClient = new WebSocket("wss://mywebappname.azurewebsites.net/Laputa");
3. 额外检查项
- 再次确认Azure App Service的WebSocket功能已启用(Azure门户→你的应用→配置→常规设置→WebSocket,设为启用)
- 验证websocket-sharp版本与当前.NET环境兼容,避免版本冲突
- 查看Azure App Service日志(门户→你的应用→日志→应用服务日志),获取服务端启动或连接失败的具体错误信息
原理说明
Azure App Service作为PaaS平台,应用运行在沙箱环境中,自定义端口无法暴露到公网。所有外部请求(包括WebSocket)必须通过平台的80/443端口进入,再由平台转发到应用内部监听端口。你之前的自定义端口3333在本地可正常访问,但在Azure上无法被外部客户端连接,最终导致客户端触发onClose事件。
内容的提问来源于stack exchange,提问作者user20352211
相关产品推荐
相关产品推荐

