2016-08-11 24 views
0

トランザクションの変更についてサーバーから特定のクライアントに通知を送信しようとしています。私はローカルや開発環境ではこれまでのところうまくやっていますが、LIVEでは3つのアプリケーションプール(3つの物理サーバー)とロードバランサ(3つとも同じマシンキーを持っています)があります。複数のアプリケーションプール上のSignalR

これは、クライアントが接続されている同じプールで通知がトリガーされたときのように見えます。動作しますが、プールが異なる場合は機能しません。

誰もこれに対処する方法を提案することができますか、または問題が不正なコード(不正なハブコンテキスト処理など)にある可能性があります。私はSignalRの新機能です - SignalRのドキュメントからメッセージブロードキャストの例を使用しました。ここ

はミュー・ハブである:

ExampleClass.Instance.NotifyTransactionChange(...) 
+0

これはhttp://www.asp.net/signalr/overview/performance/scaleout-in-signalr – Jag

+0

@JAGに役立つかもしれません。ありがとうございます - SQL Serverバックプレーンを使用して解決しました – RUKAclMortality

+0

@RUKAclMortalityちょうどFYI、マイクロソフトでは、Redisをバックプレーンとして使用することを推奨しています(明らかに、SQL Serverとサービスバスのバックプレーンにも同様の場所があります)。 –

答えて

0

public class ExampleClass 
{ 
    private readonly static Lazy<ExampleClass> _instance = new Lazy<ExampleClass>(() => 
     new ExampleClass(GlobalHost.ConnectionManager.GetHubContext<ExampleClassHub>().Clients)); 

    private IHubConnectionContext<dynamic> Clients { get; set; } 

    private ExampleClass(IHubConnectionContext<dynamic> clients) 
    { 
     Clients = clients; 
    } 

    public static ExampleClass Instance 
    { 
     get 
     { 
      return _instance.Value; 
     } 
    } 

    public void NotifyTransactionChange(int userId, string tid, bool isTransactionSuccessfull) 
    { 
     string json = JsonConvert.SerializeObject(new Notification { UserId = userId, Tid = tid, IsTransactionSuccessful = isTransactionSuccessfull }); 
     Clients.User(userId.ToString()).notifyTransactionStateChange(json); 
    } 


    class Notification 
    { 
     public int UserId { get; set; } 
     public string Tid { get; set; } 
     public bool IsTransactionSuccessful { get; set; } 
    } 
} 

そこで、サーバ側の通知から次のようにトリガーされる:ここ

public class ExampleClassHub : Hub 
{ 
    private readonly ExampleClass _ExampleClassInstance; 
    public ExampleClassHub() : this(ExampleClass.Instance) { } 

    public ExampleClassHub(ExampleClass ExampleClassInstance) 
    { 
     _ExampleClassInstance = ExampleClassInstance; 
    } 
} 

は静的インスタンスが役立つクラスがあります

SignalRスケールアウトを使用して解決: http://www.asp.net/signalr/overview/performance/scaleout-in-signalr

関連する問題