SignalR - 调用从自托管控制台服务器

SignalR - 调用从自托管控制台服务器

问题描述:

一个WPF客户端方法,我也跟着this教程和管理,以建立一个客户端 - >服务器服务器 - >客户端实时通信演示。但是,当试图在WPF项目(而不是控制台项目)中重新创建相同的场景时,我似乎无法从SignalR Hub调用WPF项目的方法。SignalR - 调用从自托管控制台服务器

注:的WPF项目和自托管控制台项目都在相同 Visual Studio解决方案

SignalR枢纽:(在自主机服务器控制台项目)

public class TestHub : Hub 
{ 
    public void NotifyAdmin_Signup() 
    { 
     Clients.All.NotifyStation_Signup(); 
     //This should call the WPF Project's NotifyStation_Signup() method 
    } 
} 

启动服务器&从同一个控制台调用集线器方法:

class Program 
{ 
    static void Main(string[] args) 
    { 
     //Start the Local server 
     string url = @"http://localhost:8080/"; 
     using (WebApp.Start<Startup>(url)) 
     { 
      Console.WriteLine(string.Format("Server running at {0}", url)); 
      Console.ReadLine(); 
     } 

     IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<TestHub>(); 
     hubContext.Clients.All.NotifyAdmin_Signup(); 
    } 
} 

MainWindow.xaml.cs在WPF项目:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     var hubConnection = new HubConnection("http://localhost:8080/"); 
     IHubProxy _hub = hubConnection.CreateHubProxy("TestHub"); 
     hubConnection.Start().Wait(); 

     //Call a local method when the Server sends a signal 
     _hub.On("NotifyStation_Signup", x => PrintAccountCount()); 
    } 

    //This never gets called :(
    private void PrintAccountCount() 
    { 
     //Display a Message in the Window UI 
     var dispatcher = Application.Current.Dispatcher; 
     dispatcher.Invoke(() => counter_accounts.Content = "I got the signal!"); 
    } 
} 

NO错误。 WPF项目的'NotifyStation_Signup'方法永远不会被服务器调用。我究竟做错了什么?

尝试注册事件之前您启动集线器连接。

 var hubConnection = new HubConnection("http://localhost:8080/"); 
    IHubProxy _hub = hubConnection.CreateHubProxy("TestHub"); 

    //Call a local method when the Server sends a signal 
    _hub.On("NotifyStation_Signup", x => PrintAccountCount()); 

    hubConnection.Start().Wait(); 
+0

相同的结果。不会被叫做兄弟 – Dinuka

解决了!我通过调用using()方法之外的集线器方法犯了一个愚蠢的错误:

static void Main(string[] args) 
{ 
    //Start the Local server 
    string url = @"http://localhost:8080/"; 
    using (WebApp.Start<Startup>(url)) 
    { 
     Console.WriteLine(string.Format("Server running at {0}", url)); 
     //Instead of having the following two lines outside of this, 
     //I put it in here and it worked :) 
     IHubContext hubContext = 
       GlobalHost.ConnectionManager.GetHubContext<TestHub>(); 
     hubContext.Clients.All.NotifyAdmin_Signup(); 
     Console.ReadLine(); 
    } 
}