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

Asp.Net与Xamarin Form下Hub SignalR卡在Connecting无法连接怎么解决

修复方案
  • Android 明文网络权限配置
    Xamarin.Android 从API 28(Android 9)开始默认禁止HTTP明文请求,你当前用的是http://10.0.2.2:36518的本地HTTP地址,需要先开启明文权限:
    在Android项目的AndroidManifest.xml的<application>节点添加属性:
android:usesCleartextTraffic="true"
  • 避免异步死锁
    UI线程下的异步调用默认会捕获同步上下文,容易触发死锁,修改StartAsync调用方式,禁止捕获上下文:
await hubConnection.StartAsync().ConfigureAwait(false);

如果后续需要操作UI控件,再用Device.BeginInvokeOnMainThread切回UI线程。

  • 服务端添加CORS配置
    跨域请求默认会被ASP.NET Core拦截,你需要在服务端Startup中添加CORS规则:
    在ConfigureServices方法中添加:
services.AddCors(options =>
{
    options.AddPolicy("AllowAll", policy =>
    {
        policy.AllowAnyHeader()
              .AllowAnyMethod()
              .AllowCredentials()
              .SetIsOriginAllowed(_ => true);
    });
});

然后在Configure方法中,UseRouting之后、UseAuthorization之前添加:

app.UseCors("AllowAll");
  • 修改服务端监听地址
    本地调试时服务端默认只监听127.0.0.1,模拟器无法访问,需要修改服务端启动配置,将监听地址改为http://0.0.0.0:36518,允许所有IP访问。
  • 添加异常捕获排查具体错误
    给StartAsync添加try-catch块,打印详细异常信息,方便定位具体问题:
try
{
    await hubConnection.StartAsync().ConfigureAwait(false);
}
catch (Exception ex)
{
    // 打印ex.Message、ex.StackTrace等信息排查
    Console.WriteLine(ex.ToString());
}
  • 修复Hub方法的异步写法
    服务端Hub的SendData方法不能用async void,需改为async Task,避免未捕获的异常导致服务端崩溃:
public async Task SendData(string b)
{
    Debug.WriteLine("Hello world");
    await Clients.All.SendAsync("Get", b);
}

内容的提问来源于stack exchange,提问作者Steven-Carrot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:30:01