72

サーバーとクライアントの間で通信するための SignalR ハブをセットアップしました。ハブ サーバー側のコードは、Hooking.cs というクラスに格納されます。私が望むのは、Hooking.cs で定義されたメソッドを呼び出して、アプリケーションのどこからでも、接続されているクライアントにメッセージをブロードキャストできるようにすることです。クライアント/サーバーの呼び出しごとに Hooking.cs の新しいインスタンスが作成されるようです。

var hooking = new Hooking();
hooking.Test();

次のような Hooking.cs で定義されているメソッド Test() を使用して

public static void Test() {
    Clients.test()
}

そしてクライアント側のjavascriptを使って

var hooking = $.connection.hooking;
hooking.test = function() { alert("test worked"); };
$.connection.hub.start()

Clients は静的ではないため、静的メソッドからアクセスできないため、残念ながらそれほど単純ではありません。

SignalR のソース コードを調べると、有望そうなメソッドに出くわしたHubs.Invoke(string hubName, string method, params object[] args)ので、 のようなものを使用できればと思いますが、機能さHubs.Invoke("Hooking", "Test")せることはできません。

これに関する任意の助けをいただければ幸いです

4

5 に答える 5

111

これは、SignalR 2.x の正しい方法です。

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.All.addMessage(message);

基本的に、現在のホストの依存関係リゾルバーを使用してIConnectionManager、ハブのコンテキスト オブジェクトを取得できるインターフェイスを解決できます。

詳細については、公式ドキュメントを参照してください。

于 2012-06-06T12:54:25.060 に答える
23

Hub.GetClients はバージョン 0.4.0 でなくなりました。

wikiから、次のものを使用できるようになりました。

IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
dynamic clients = connectionManager.GetClients<MyHub>();
于 2012-02-07T17:26:03.700 に答える
1

https://github.com/SignalR/SignalRからどのようChat.csに行われるかを見てください。SignalR.Samples.Hubs.Chat

Dictionary<TKey, TValue>staticが上部でインスタンス化されていることがわかります。そのため、Chatクラスが永続化されたインスタンス (?) であるか、その配列が何らかの形で更新されているかのいずれかで、それらも永続的に維持されていると思います。

それをチェックしてください、デビッド・ファウラーはおそらくこれで最高でしょう.

于 2011-10-03T11:24:55.223 に答える