2017-11-02 16 views
0

すべてのクライアントにメッセージをブロードキャストしようとすると、サーバーからクライアントのJavaScriptコードがトリガーされ、そのジョブが完了します。SignalR - サーバーへの通知のプッシュ

しかし今回私の目的は、すべてのサーバーでメソッドをトリガーすることです。たとえば、あるサーバーでユーザーの役割が変更された場合、この操作について他のサーバーに警告する必要があり、特定のユーザーの更新されたユーザー役割リストを他のサーバーに取得させたいと考えています。

これはSignalRで可能ですか?サーバーはクライアント(ブラウザ)のように動作できますか?

+0

サーバはバックプレーンを使用していますか? – gobes

+0

はい@gobes、彼らはバックプレーンとしてRedisサーバーを使用しています。 –

+0

このようなことをネイティブに行うことはできませんが、あなたがredisを使用しているときには、あるチャネルをサブスクライブしてからリフレッシュメッセージを発行し、サブスクライバでリフレッシュメカニズムを起動させることができます。 – gobes

答えて

1

はい、これを行うことができます。

は、あなたは以下のハブを持っているとしましょう:

var _connection = new HubConnection("http://localhost:1234/signalr"); 
var _theHub = _connection.CreateHubProxy("TheHub"); 

_myHub.On<int>("RoleChanged", userId => 
    { 
     System.Diagnostics.Debug.WriteLine("Changed user's Id: " + userId); 
    }); 

_connection.Start().Wait(); 

を行い、RoleChangedイベントを呼び出すには:すべてのリスニングサーバーで

public class TheHub : Hub 
{ 
    public void RoleChanged(int userId) 
    { 
     Clients.All.roleChanged(userId); 
    } 
} 

を、あなたは何をする必要があるだろう

_myHub.Invoke("RoleChanged").Wait(); 
+0

ASP.NETサーバーのサイドコードに2番目のコードセグメントを配置する場所はどこですか?さらに、 '_connection.Start()。Wait();'は永続的ですか、それとも一度だけ実行されますか? –

+0

2番目のコードは、Global.asax.csファイルのApplication_Startメソッドに配置できます。あなたは一度だけそれを呼び出す必要があります。 – chaosifier

関連する問題