C# .NET客户端分布式场景中的信号器故障排除

C# .NET客户端分布式场景中的信号器故障排除,c#,signalr,C#,Signalr,我有一个像这样分层的应用程序:WPF->WCF->BLL->DAL->DB。WCF层启动信令器主机。BLL使用信号器通知客户端。WPF是接收信号器通知的客户端 我的问题是,它在我的笔记本电脑上工作,但是,当部署到分布式环境(WPF在我的笔记本电脑上运行,WCF在另一台服务器上运行)时,相同的代码不会导致WPF客户端获得信号器通知 我有两个问题: 是否有我做得不正确的地方(见下面的代码)?我认为在配置文件中使用localhost可能是一个问题,但谷歌没有对此做出任何解释 对于这种情况,典型的故障排

我有一个像这样分层的应用程序:WPF->WCF->BLL->DAL->DB。WCF层启动信令器主机。BLL使用信号器通知客户端。WPF是接收信号器通知的客户端

我的问题是,它在我的笔记本电脑上工作,但是,当部署到分布式环境(WPF在我的笔记本电脑上运行,WCF在另一台服务器上运行)时,相同的代码不会导致WPF客户端获得信号器通知

我有两个问题:

  • 是否有我做得不正确的地方(见下面的代码)?我认为在配置文件中使用
    localhost
    可能是一个问题,但谷歌没有对此做出任何解释
  • 对于这种情况,典型的故障排除步骤是什么?我不知道从哪里开始
  • WCF主机启动信号器:

        private void StartSignalRHost()
        {
            var url = ConfigurationManager.AppSettings["signalrAddress"];
            WebApplication.Start<Startup>(url);
        }
    
        private static void OnDatabaseItemAdded(object sender, EventArgs<string> e)
        {
            var hubContext = GlobalHost.ConnectionManager.GetHubContext<PrestoHub>();
            hubContext.Clients.All.OnDatabaseItemAdded("snuh");
        }
    
        private void InitializeSignalR()
        {
            var signalrAddress = ConfigurationManager.AppSettings["signalrAddress"];
            var hubConnection = new HubConnection(signalrAddress);
            var prestoHubProxy = hubConnection.CreateHubProxy("PrestoHub");
            prestoHubProxy.On<string>("OnDatabaseItemAdded", OnDatabaseItemAdded);
            hubConnection.Start();
        }
    
        private void OnDatabaseItemAdded(string data)
        {
            Refresh();
        }
    

    经过进一步的研究和反复试验,问题是在服务器的配置中使用
    localhost

    我必须改变这一点:

    <add key="signalrAddress" value="http://localhost:8084"/>
    

    您的中心是否覆盖该名称?如果没有,signar喜欢重命名hub,例如“prestoHub”。此外,您是否验证了客户端是否确实连接到服务器?@JoelLucsy它没有。PrestoHub类上没有属性。而且它在本地工作。我认为这可能是一个权限问题,因为我的笔记本电脑与WCF服务器位于不同的域中。但我只是在猜测这一点。我如何验证客户端是否正在连接?当我在client.hubConnection.Start().Wait()上单步执行代码时,没有发生异常;
    <add key="signalrAddress" value="http://localhost:8084"/>
    
    <add key="signalrAddress" value="http://servername:8084"/>
    
    http://127.0.0.1
    http://110.120.130.140
    http://myserver