使用Xamarin对接SignalR时出现Connection Refused连接被拒问题求助
问题修复方案
1. 连接被拒绝核心原因
你当前填写的服务地址localhost在Xamarin运行的设备(模拟器/真机)中指向的是设备自身,而非运行ASP.NET Core服务的开发主机,这是该场景下最常见的错误。
按以下步骤修改配置:
- 先查询你开发机的局域网IP(例如192.168.3.45),确保开发机和Xamarin运行设备处于同一局域网下,关闭开发机防火墙或者放行对应服务端口。
- 修改
launchSettings.json中FleetSocketServer配置的applicationUrl,将localhost替换为开发机局域网IP:
调试阶段优先选择"applicationUrl": "https://192.168.3.45:5001;http://192.168.3.45:5050"FleetSocketServer(项目模式)启动服务,不要使用IIS Express,IIS Express默认禁止外部IP访问,配置成本更高。 - Xamarin客户端代码中
WithUrl的地址同步修改为开发机IP,调试阶段建议先用HTTP协议,避免自签证书信任问题:
如果使用安卓端,需要额外在AndroidManifest中添加明文网络访问权限,安卓9及以上默认禁止HTTP请求。.WithUrl("http://192.168.3.45:5050/chat")
2. 消息接收逻辑错误(连接通后会遇到)
你客户端注册的消息监听方法名是ReceiveMessage,但服务端Hub中推送的方法名是Recieve,二者不匹配会导致收不到消息,修改任意一侧保持名称完全一致即可:
// 服务端修改为 await Clients.All.SendAsync("ReceiveMessage", message);
3. 验证步骤
修改完成后先在开发机浏览器访问服务地址http://你的开发机IP:5050/chat,如果服务正常运行会返回404或握手提示,确认服务可用后再启动Xamarin客户端调试。
内容的提问来源于stack exchange,提问作者Jaxon Poentis
相关产品推荐
相关产品推荐

