Ich möchte einen bestimmten Client vom Server aus anrufen und nicht an alle senden. Das Problem ist, dass ich mich im Umfang einer AJAX-Anfrage befinde (sagen wir in .aspx codebehind) und nicht in Hub oder PersistentConnection. Ich habe also keine Clients-Eigenschaft - und der Client, der diesen Ajax-Aufruf (jquery) ausgeführt hat, ist nicht der Client Ich möchte eine Signalnachricht senden!
Jetzt habe ich einen Hub, der beim Laden der JS-Seite aufgerufen wird und der einen neuen Client in der statischen Serverliste registriert, sodass ich Client-Guids habe. Aber ich weiß nicht, wie ich damit Nachrichten vom Server an einen bestimmten Client senden soll.
$('#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(); });
Auf der Serverseite senden Sie die ID des Clients und die Antwort auf diese ID
public void Send ( string name , string message , string connID ) { Clients.Client(connID).broadcastMessage(name , message); }
quelle
undefined
?Clients.Client(connID)
in denSend()
Retouren wird derselbe Client verwendet, der dieSend
Funktion zunächst tatsächlich aufruft. Dies bedeutet, dass dieSend
Funktion tatsächlich eine Nachricht an denselben Client sendet. Was ist der Sinn?Jedes Mal, wenn Sie eine Anfrage an den Hub-Server senden, hat Ihre Anfrage eine andere Verbindungs-ID. Daher habe ich eine statische Hash-Tabelle hinzugefügt, die einen Benutzernamen enthält, der sich nicht ständig ändert, und jedes Mal eine Verbindungs-ID für das Signal r Wenn Sie eine Verbindung herstellen, wird die Verbindungs-ID aktualisiert
$.connection.hub.start().done(function () { chat.server.registerConId($('#displayname').val()); });
und im Servercode:
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); } }
quelle
wenn Sie eine Nachricht an eine bestimmte ID senden möchten
Clients.Client(Context.ConnectionId).onMessage( new Message{From = e.Message.From, Body = e.Message.Body} );
quelle
Wenn der bestimmte Benutzer selbst der Anrufer ist, können Sie Folgendes verwenden:
Clients.Caller.myJavaScriptClientFunction();
quelle