SignalR客户端连接尚未建立

本文关键字:建立 连接 客户端 SignalR | 更新日期: 2023-09-27 18:13:29

我创建了一个SignalR Selfhosted应用程序,但无法通过浏览器或Windows Phone(这是我的客户端)访问。我遵循了几个教程,他们几乎说同样的事情,我相信错误是在我的网络配置上,还注意到,当你运行项目时,IIS不启动(不确定它是否也是必需的)。

SignalRServer:

class Program : Hub
    {
        private static HubConnection Connection { get; set; }
        private static IHubProxy HubProxy { get; set; }
        const string Url = "http://*:8080";
        static void Main(string[] args)
        {
            // This will *ONLY* bind to localhost, if you want to bind to all addresses
            // use http://*:8080 to bind to all addresses. 
            // See http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx 
            // for more information.
            using (WebApp.Start(Url))
            {
                Console.WriteLine("Servidor rodando em {0}", Url);
                Console.ReadLine();
            }
        }
        private static void Connection_Closed()
        {
            Connection = null;
        }
    }
    class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.UseCors(CorsOptions.AllowAll);
            app.MapSignalR();
        }
    }

错误是:

连接尚未建立。

My Client类:

public class SignalRService : PhoneApplicationPage
    {
        public String UserName { get; set; }
        public IHubProxy HubProxy { get; set; }
        private const string ServerURI = "http://localhost:8080";
        public HubConnection Connection { get; set; }
        public SignalRService()
        {
            UserName = "Luizaooo";
            ConnectAsync();
        }
        public void ObterAtualizacoesProdutos()
        {
            ProdutoService produtoService = new ProdutoService();
            var dataHora = produtoService.ObterDataHoraUltimaAtualizacao();
            HubProxy.Invoke("ObterAtualizacoes", dataHora);
            MessageBox.Show("passou");
        }
        private async void ConnectAsync()
        {
            Connection = new HubConnection(ServerURI);
            Connection.Closed += Connection_Closed;
            HubProxy = Connection.CreateHubProxy("ProdutoHub");
            HubProxy.On<List<Produto>>("AtualizarProdutos", (ListaDeProdutos) =>
                this.Dispatcher.BeginInvoke(() =>
                {
                    var a = ListaDeProdutos;
                }));
            try
            {
                await Connection.Start();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                return;
            }
        }
        private void Connection_Closed()
        {
            Connection = null;
        }
    }

SignalR客户端连接尚未建立

正确识别Startup类可能很棘手,特别是在自主机场景中。

对于您的代码,首先检查Configuration方法是否正在运行。如果不是,添加

[assembly: OwinStartup(typeof(Program.Startup))]

命名空间声明之上,如下所述:

你可以通过使用WebApp.Start的重载来完全绕过这个问题,它接受一个谓词:

 WebApp.Start(url, new Action<IAppBuilder>((app) =>
 {
     app.UseCors(CorsOptions.AllowAll);
     app.MapSignalR();
 }));

无论哪种方式,通过导航到http://localhost:8080/signalr/hubs来测试您的连接。如果它显示了一个signalR javascript文件,你就知道你的服务已经启动并运行了