2016-08-26 7 views
1

SignalR(2.2.0)を使用してリアルタイム更新を受信するJQuery UIウィジェットを作成しようとしています。サーバー上でメソッドを呼び出すだけで正常に動作しますが、サーバーからクライアントコールバックを呼び出すことはクライアントでは起動しません。SignalRコールバックがJQuery UIウィジェットで起動しない

私はここに示唆されているようにクライアントのログを有効にしています:SignalR Troubleshootingと私は接続で設定がうまくいっているが、クライアントメソッドが呼び出されないことをコンソールで見ることができます。いかなる種類のエラーメッセージもありません。また、私はそうのような接続を開始する前に、ハブプロキシでクライアントメソッドを定義している:

_bindClientCallbacks: function() { 
    theHub.client.broadCastToClient = function (message) { 
     twr.log(message); 
    }; 
} 

、その後、私はそうのようなハブの接続を開始します。

_startSignalRClient: function() { 
    $.connection.hub.logging = true; 
    $.connection.hub.start() 
     .done(function() { 
      twr.log("Connected to SignalR hub, id=" + $.connection.hub.id); 
     }) 
     .fail(function() { 
     }); 
} 

これらの方法は「_CREATEに呼ばれていますそのようなjQueryのウィジェットでは()」関数:

_create: function() { 
    theHub = $.connection.DataImportHub; 
    this._bindClientCallbacks(); 
    this._startSignalRClient(); 
} 

これは正常に動作し、私はidの有効な接続を得ることができます。クライアントからサーバーメソッドを呼び出すこともできます。しかし、私はそうのように、サーバからクライアント上broadCastToClientメソッドを呼び出すしようとすると:

public void BroadCastToClient(string userId, string message) 
{ 
    var hubContext = GlobalHost.ConnectionManager.GetHubContext<DataImportHub>(); 
    foreach (var connectionId in _connections.GetConnections(userId)) 
    { 
     hubContext.Clients.Client(connectionId).broadCastToClient(message); 
    } 
} 

何がクライアント上で起こりません...サーバーは、私が乗った接続IDに対応する有効な接続を見つけないにもかかわらず、クライアント。

私はここで何が欠けていますか?

+0

app.Map("/signalr", map => { var hubConfiguration = new HubConfiguration { Resolver = new NinjectSignalRDependencyResolver(new StandardKernel()) }; map.RunSignalR(hubConfiguration); }); 

を確認 _bindClientCallbacks' 'その'_startSignalRClient'の前に呼び出されます... – ViRuSTriNiTy

+0

JQuery UIウィジェットの_create関数の_startSignalRClientの前に_bindClientCallbacksを呼び出します(clのポストに関数を追加しました)私はそれが問題だとは思わないので、 – lange

+0

'hubContext.Clients()'は私のマシンでは解決できません。代わりに 'hubContext.Client()'を試してみてください。 – ViRuSTriNiTy

答えて

0

これを読んで解を見つけました。post。 OwinスタートアップクラスのカスタムSignalR依存関係リゾルバ設定を使用すると、JavaScriptのコールバックが壊れてしまうようです。依存リゾルバのセットアップコードをGlobal.asax内のApplication_Startに移動すると、そのトリックが実行されます。なぜこれが本当に起こる私を超えている... Startup.csで

悪いDIの設定は、Global.asaxのグッドDIの設定は

protected void Application_Start() 
{ 
    GlobalHost.DependencyResolver = new NinjectSignalRDependencyResolver(new StandardKernel()); 
} 
関連する問題