2016-07-22 12 views
1

Я последовал this учебник и удалось создать Клиент -> Сервер и Сервер -> Клиент в реальном времени связи демо. Однако при попытке воссоздать один и тот же сценарий в проекте WPF (вместо проекта консоли) я не могу назвать метод проекта WPF из концентратора SignalR.SignalR - Вызов метода клиента WPF из резидентных консоли сервера

Примечание: МОФ Project и Project КОНСОЛЬ самопринятый находятся в же Visual Studio Solution

SignalR Hub: (в Self-хост проекта консоли сервера)

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!"); 
    } 
} 

Там не НИКАКИХ ОШИБОК. Метод «NotifyStation_Signup» проекта WPF никогда не вызывается сервером. Что я делаю не так?

ответ

0

Попробуйте зарегистрировать событие до, вы запустите соединение концентратора.

 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

Тот же результат. Не получает вызов bro – Dinuka

1

Решено! Я сделал глупую ошибку, назвав метод хаба вне метода 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(); 
    } 
}