73

サーバーから特定のクライアントを呼び出し、すべてのクライアントにブロードキャストしたくない。問題は、私がいくつかのAJAXリクエストのスコープ内にあり(たとえば、.aspxコードビハインド内)、HubまたはPersistentConnectionではないため、Clientsプロパティを持たないことです-そして、そのajax(jquery)呼び出しを行ったクライアントはクライアントではありませんシグナリングメッセージを送信したい!

これで、JSページの読み込み時に呼び出されるハブが1つあり、新しいクライアントがサーバーの静的リストに登録されるため、クライアントガイドがあります。しかし、それを使用してサーバーから特定のクライアントにメッセージを送信する方法がわかりません。

4

5 に答える 5

48

最新のドキュメントを参照してください。

永続的な接続-https://github.com/SignalR/SignalR/wiki/PersistentConnection

ハブ-http : //www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server

于 2011-10-24T07:56:55.570 に答える
26
$('#sendmessage').click(function () {
    // Call the Send method on the hub. 
    chat.server.send($('#displayname').val(), $('#message').val(), $.connection.hub.id);
    // Clear text box and reset focus for next comment. 
    $('#message').val('').focus();
});

サーバー側で、クライアントのIDとそのIDへの応答を送信します

  public void Send ( string name , string message , string connID )
  {
        Clients.Client(connID).broadcastMessage(name , message);
  }
于 2013-03-22T22:14:25.073 に答える
13

ハブサーバーにリクエストを送信するたびに、リクエストの接続IDが異なるため、ユーザー名を含む静的ハッシュテーブルを追加しました。これは継続的に変更されることはなく、シグナルrからの接続IDは毎回です。接続すると、接続IDが更新されます

 $.connection.hub.start().done(function () {
   chat.server.registerConId($('#displayname').val());
 });

およびサーバーコード:

public class ChatHub : Hub
{
    private static Hashtable htUsers_ConIds = new Hashtable(20);
    public void registerConId(string userID)
    {
        if(htUsers_ConIds.ContainsKey(userID))
            htUsers_ConIds[userID] = Context.ConnectionId;
        else
            htUsers_ConIds.Add(userID, Context.ConnectionId);
    }
}
于 2014-08-31T12:24:35.000 に答える
3

特定のIDにメッセージを送信する場合

 Clients.Client(Context.ConnectionId).onMessage(
               new Message{From = e.Message.From, Body = e.Message.Body}
               );
于 2016-10-27T05:02:24.947 に答える
1

特定のユーザーが実際に自分自身の発信者である場合は、次を使用できます。

Clients.Caller.myJavaScriptClientFunction();
于 2016-03-28T16:10:42.390 に答える