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

Xamarin Forms中SignalR客户端连接失败问题求助

解决方案:SignalR客户端与服务端版本不匹配及连接问题修复

核心问题:版本兼容性冲突

你当前使用的SignalR客户端(v8.0.5)和服务端(v1.1.0)版本跨度过大,两者完全不兼容。ASP.NET Core SignalR要求客户端与服务端版本严格对齐(或属于同大版本系列),版本不匹配会导致握手阶段完成但后续连接流程中断,最终表现为服务端触发OnConnectedAsync(),但客户端因超时抛出"操作已取消"异常。

步骤1:统一SignalR版本

  • 服务端:卸载Microsoft.AspNetCore.SignalR.Core v1.1.0,安装与客户端同版本的Microsoft.AspNetCore.SignalR(v8.0.5)。注意ASP.NET Core 8要求服务端项目目标框架为.NET 8,若当前服务端基于旧版.NET Core(如2.x),需先升级项目框架至.NET 8,再安装对应版本的SignalR包。
  • 客户端:保留Microsoft.AspNetCore.SignalR.Client v8.0.5,确认Xamarin Forms项目支持.NET 6+(若使用传统Xamarin,需确保客户端包与项目框架兼容)。

步骤2:调整连接配置细节

  1. 验证URL正确性
    确保客户端的url变量格式为http(s)://[Conveyor分配的IP]:[端口]/chathub(例如http://192.168.1.100:5000/chathub)。可通过安卓设备浏览器访问该URL,若返回Connection ID required则说明服务端Hub路径配置正常。

  2. 延长连接超时时间
    StartAsync()默认超时较短,手动延长超时避免因网络延迟触发取消:

    await hubConnection.StartAsync(TimeSpan.FromSeconds(30));
    
  3. 添加重连状态回调
    启用自动重连后,添加回调排查连接状态变化:

    hubConnection.Reconnecting += error =>
    {
        Console.WriteLine($"重连中:{error.Message}");
        return Task.CompletedTask;
    };
    
    hubConnection.Reconnected += connectionId =>
    {
        Console.WriteLine($"重连成功,新连接ID:{connectionId}");
        return Task.CompletedTask;
    };
    
    hubConnection.Closed += error =>
    {
        Console.WriteLine($"连接关闭:{error?.Message}");
        return Task.CompletedTask;
    };
    

步骤3:服务端配置验证

确保服务端SignalR配置正确(.NET 6+示例):

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSignalR();

var app = builder.Build();
app.MapHub<ChatHub>("/chathub");
app.Run();

若使用旧版Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapHub<ChatHub>("/chathub");
    });
}

步骤4:安卓设备网络配置

  1. 添加网络权限:在安卓Manifest文件中添加:
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
  2. 允许明文流量:若使用HTTP而非HTTPS,在<application>标签中添加:
    android:usesCleartextTraffic="true"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 15:12:42