の外:?取得connectionId私はハブの外のクライアントにconnectionId /のclientIdを得るのですか..私は次の操作を実行するために管理しているどのようにハブ、SignalR
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
しかし、そのコンテキスト・オブジェクトでnoありclientId
のようなものです。
の外:?取得connectionId私はハブの外のクライアントにconnectionId /のclientIdを得るのですか..私は次の操作を実行するために管理しているどのようにハブ、SignalR
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
しかし、そのコンテキスト・オブジェクトでnoありclientId
のようなものです。
ハブにIConnected/IDisconnectを実装し、データベースなどのクライアントを手動で追跡し、必要に応じてリストを取り戻すことができます。下の例は、SignalR Wiki
public class Status : Hub, IDisconnect, IConnected
{
public Task Disconnect()
{
return Clients.leave(Context.ConnectionId, DateTime.Now.ToString());
}
public Task Connect()
{
return Clients.joined(Context.ConnectionId, DateTime.Now.ToString());
}
public Task Reconnect(IEnumerable<string> groups)
{
return Clients.rejoined(Context.ConnectionId, DateTime.Now.ToString());
}
}
からです。なぜグローバルIDに接続IDがあるのでしょうか。どの接続が参照されますか?グローバルコンテキストを取得すると、サーバーからクライアントへの片方向のチャネルにアクセスし、その上にメッセージを送信できます。ハブの呼び出し元でないため、ハブの接続IDにアクセスすることはできません。アプリケーションを使用する必要がある場合は、アプリケーションのどこかに格納することができます。
ここに解決策があります。 hub
の中でメソッドを呼び出すことができ、そこからconnection ID
を返すことができます。
コントローラで
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
MyHub _connectedHub= new MyHub();
var connectedUserID = _connectedHub.GetConnectionID();
ハブで
public string GetConnectionID()
{
return "Your Connection ID as String" //This can be stored in a list or retrieved in any other method
}
あなたはconnectedUserID
変数にハブの外に必要なIDを取得します。 希望はこれが助けます。
誰もチャットサーバーを構築しません。私は、現在のクライアントがConnectionIdを使用する方法を暗示したので、そのユーザ/セッションだけにメッセージを送ることができたと思います。私は進捗状況メッセージを送信したいクライアントからMVCアクションでこれを最もうまくやる方法を自分自身が知っています。 ConnectionIdsをユーザー名でキャッシュする方法はいくつかありますが、Webアプリケーションのような複数の接続を持つ同じユーザーを許可するためのものはまったくありませんでした。それのアイデア?ありがとう。 – Dave
クライアントからあなたのmvcアクションに送信します。 $ .connection.hub.idを介してクライアント上で利用可能です。 – davidfowl