2016-07-22 17 views
1

からWPFクライアントのメソッドを呼び出すと、私はthisチュートリアルに続き、クライアントのセットアップに管理 - >サーバーサーバーを - >クライアントリアルタイム通信のデモ。しかし、(Consoleプロジェクトではなく)WPFプロジェクトで同じシナリオを再作成しようとすると、WPFプロジェクトのメソッドをSignalR Hubから呼び出すことができません。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 
    } 
} 

サーバーの起動&同じコンソールからHubメソッドを呼び出す:

WPFプロジェクトで
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:

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

エラーなしはありません。 WPFプロジェクトのNotifyStation_Signupメソッドは、サーバーによって決して呼び出されません。私は間違って何をしていますか?

答えて

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

同じ結果です。仲間と呼ばれない – 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(); 
    } 
} 
関連する問題