2017-05-25 17 views
1

私はクライアントの1つがハブクラスメソッドAddMessageに要求を送信し、それを開始したクライアントを含むすべてのクライアントにそのメッセージをブロードキャストするシナリオがあります。C#を使用してSignalRクライアントのHubクラスからブロードキャストメッセージを受信する方法は?

編集

問題は、私は次のコードに示すように、クライアントからハブメソッドAddMessageを呼び出すことができるだということですが、私は、クライアント側でのブロードキャストメッセージを処理する方法を見つけることができませんでした次の行を使用してHubクラスで開始されます。

Clients.All.NotifyMessageToClients(name, message); 

SignalRハブクラス

using System; 
using Microsoft.AspNet.SignalR; 
using System.Threading.Tasks; 

public class SignalRChatHub : Hub 
{ 
    public void AddMessage(string name, string message) 
    { 
     // Following call is supposed to notify all clients with passed parameters. 
     // They could have a method called NotifyMessageToClients to fetch the broadcasted message 

     Clients.All.NotifyMessageToClients(name, message); 
    } 
} 

SignalRクライアント

using System; 
using Microsoft.AspNet.SignalR.Client; 

public partial class Default : System.Web.UI.Page 
{ 
    HubConnection hubConnection; 
    IHubProxy stockTickerHubProxy; 

    public Default() 
    { 
     hubConnection = new HubConnection("http://localhost:6898/"); 
     stockTickerHubProxy = hubConnection.CreateHubProxy("SignalRChatHub"); 
    } 

    async public void SendAddNotification(string msgFrom, string msg) 
    { 
     // Following line calls Addmessage method in SignalRChatHub class 
     await stockTickerHubProxy.Invoke("Addmessage", "Ajendra", "Hello StackOverflow"); 
    } 

    // I might need the method NotifyMessageToClients here... to receive broadcasted message 
} 

私は、クライアントを作成することによって、jQueryのではなく、C#で同じことを達成する方法についていくつかのアイデアを持っています私が上記のように。どのように私はこれを達成するだろう、どんな助けていただければ幸いです。

上記の方法が意味をなさない場合は、適切な方法を教えてください。おかげ

+0

あなたがこの質問を書いた方法で少し混乱していますが、あなたがここで何を求めているのかははっきりしていません。すべてのクライアントにメッセージをブロードキャストする方法を尋ねていますか?あなたはすでにそれをしていたからです。それともクライアント側でそれらを受け取るかを尋ねていますか?あるいは、あなたはクライアント側からの接続を設定する方法を知らないでしょうか?いずれにせよ、あなたの質問にはできるだけ明示的にしようとしてください。あなたが今までに試したことを教えてください。 – Dennis1679

+0

@ Dennis1679ご迷惑をおかけして申し訳ございません。編集のセクションを確認してください。今すぐ明らかになってほしい、 –

答えて

1

あなたは、このようなサーバからのイベントをリッスンする必要があります:あなたはWPFのUIを更新する必要がある場合...

public partial class Default : System.Web.UI.Page 
{ 
    HubConnection hubConnection; 
    IHubProxy stockTickerHubProxy; 

    public Default() 
    { 
     hubConnection = new HubConnection("http://localhost:6898/"); 
     stockTickerHubProxy = hubConnection.CreateHubProxy("SignalRChatHub"); 

     // listen to server events... 
     // n is "name" and m is "message", but you can change to "a" and "b" or anything else... 
     stockTickerHubProxy.On<string, string>("NotifyMessageToClients", (n, m) => 
     { 
      Console.WriteLine("Message received from server. Name: {0} | Message: {1}", n, m); 
     }); 

    } 

    // "async" methods should return Task instead of void.... 
    // unless they are event handlers for UI applications... 
    public async Task SendAddNotification(string msgFrom, string msg) 
    { 
     // first, start the connection... 
     await stockTickerHubProxy.Start(); 
     // Following line calls Addmessage method in SignalRChatHub class 
     await stockTickerHubProxy.Invoke("Addmessage", "Ajendra", "Hello StackOverflow"); 

     // you don't stop the connection, otherwise you won't be able to receive calls from the server 
    } 

} 

、たとえば、あなたは、このようなあなたのイベントを実装する必要があります。

stockTickerHubProxy.On<string, string>("NotifyMessageToClients", (a,b) => 
    Dispatcher.InvokeAsync(() => 
     { 
      // update UI... 
      textBox.Text += string.Format("Name: {0} | Message: {1}", a, b); 
     }) 
); 

詳しくはthis guideをお読みください。

+0

答えに感謝します。あなたはWPFでのUIの更新について言及しましたが、Webアプリケーションを使用しているクライアント側でUIを更新する方法はありますか?私はすぐにそれを答えとしてマークします:) –

+0

@AjendraPrasadよろしくお願いします。 Webアプリケーションでは、DOMを更新するためにクライアントコードをjavascriptにする必要があります。サーバー側にクライアントを実装すると、私が知る限りUIを更新することはできません。 – Alisson

+0

ポイントに感謝します。私は今、絶対URLがjavascriptでサーバーを指すリファレンスであるリンクをたどって、そうすることができます。 http://www.codeguru.com/columns/experts/how-to-push-data-from-server-to-client-using-signalr.htm –

関連する問題