SignalR HubConnectionState = 正在连接

Posted

技术标签:

【中文标题】SignalR HubConnectionState = 正在连接【英文标题】:SignalR HubConnectionState = connecting 【发布时间】:2021-12-15 19:41:19 【问题描述】:

我正在尝试使用 Xamarin 客户端创建 SignalR 服务器。 每次我尝试连接到服务器时,状态只是“正在连接”而没有改变。试图用我在互联网上找到的代码绕过证书,但它并没有解决问题。当我尝试访问集线器站点(ip:port/notifier)时,我收到消息“需要连接 ID”

客户端:

public class SignalRService : ISignalRService
    
        private readonly HubConnection hubConnection;

        public SignalRService()
        
            hubConnection = new HubConnectionBuilder()
                .WithUrl("https://ip:5001/notifier", options => 
                    options.HttpMessageHandlerFactory = factory => new HttpClientHandler
                    
                        ServerCertificateCustomValidationCallback = (message, cert, chain, errors) =>  return true; 
                    ;
                )
                .WithAutomaticReconnect()
                .Build();
        

        public void /*async Task*/ Connect()
        
            hubConnection.StartAsync();
            var a = hubConnection.State;
            while (hubConnection.State == HubConnectionState.Connecting) //for debug purposes
            
                continue;
            
            a = hubConnection.State;    
        

服务器端

public void ConfigureServices(IServiceCollection services)
        
            services.AddRazorPages();
            services.AddSignalR();
        

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        
            if (env.IsDevelopment())
            
                app.UseDeveloperExceptionPage();
            
            else
            
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            

            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            
                endpoints.MapRazorPages();
                endpoints.MapHub<NotifyHub>("/notifier");
            );
        

Thanks for any help! 

【问题讨论】:

您是否已验证可以从您的设备/模拟器访问服务器?是否有防火墙阻止该端口? @Jason 可以到达。当我尝试使用模拟器上的浏览器访问它时,它显示连接不是私有的,但它是可以访问的。 @Jason 并为防火墙中的端口添加规则(希望正确) 【参考方案1】:

所以我终于找到了解决办法!

问题是模拟器无法通过 http://localhost:port 连接到本地主机,但使用 ip "10.0.2.2:port"

由于某种原因,将 signalR 实现到客户端,因为服务也无法正常工作...

【讨论】:

以上是关于SignalR HubConnectionState = 正在连接的主要内容,如果未能解决你的问题,请参考以下文章

SignalR系列教程:SignalR快速入门

SignalR学习系列4. SignalR广播程序

SignalR入门之多平台SignalR服务端

SignalR学习系列3. SignalR实时高刷新率程序

将 REST 与 SignalR 混合而不是仅使用 SignalR 的目的是啥? [复制]

快速了解SignalR—在MVA微软虚拟学院学习SignalR