使用 SignalR 2 和 MVC 4.0 无法将消息从服务器发送到特定客户端
本文关键字:服务器 客户端 消息 SignalR MVC 使用 | 更新日期: 2023-09-27 18:35:36
我想使用 signalR 从服务器调用通知特定客户端,但它不起作用。 我的代码已成功执行,但客户端剂量未收到来自服务器的任何调用。
但是,这适用于所有客户端。
var hubContext = GlobalHost.ConnectionManager.GetHubContext<ProcessStatusNotifyHub>();
hubContext.Clients.All.notify("Got it!");
但这不适用于特定客户[更新代码]以下代码用chat.cshtml编写
$(function () {
// Reference the auto-generated proxy for the hub.
var chat = $.connection.processStatusNotifyHub;//chatHub;
chat.client.notify = function (msg) {
alert(msg);
}
// Start the connection.
$.connection.hub.start().done(function () {
var myClientId = $.connection.hub.id;
console.log('connected: ' + myClientId);
$('#sendmessageToClient').click(function () {
//chat.server.send('imdadhusen', 'This is test text');
$.ajax({
url: '@Url.Action("Send", "PushNotification")',
type: 'POST',
data: { 'clientID': myClientId },
dataType: 'json',
success: function (result) {
alert(result.status);
}
});
});
});
});
以下代码是在控制器中编写的
[HttpPost]
public ActionResult Send(string clientID)
{
var hubContext = GlobalHost.ConnectionManager.GetHubContext<ProcessStatusNotifyHub>();
//hubContext.Clients.All.notify("Got it!");
hubContext.Clients.User(clientID).notify("Got it!");
responseResult result = new responseResult();
result.status = "OK";
result.message = "Notification sent successfully";
return Json(result, JsonRequestBehavior.AllowGet);
}
我已经尝试调试代码,它在 .cstml 或 controlloer 上显示客户端 id 的正确值。 例如 clientid : 0fdf6cad-b9c1-409e-8eb7-0a57c1cfb3be
您能否帮助我从服务器向特定客户端发送通知。
操作hubContext.Clients.User(string)
需要当前 HTTP 请求的用户 ID,而不是 SignalR 的客户端 ID。
如果要使用客户端 ID,请使用以下操作:
hubContext.Clients.Client( )
如果您想由当前用户访问它,那么您可以使用此获取当前用户 ID
string UserID=User.Identity.GetUserId()
这不是对特定问题的答案,而是对代码的建议。 为什么不让客户端使用 Signalr 连接来调用服务器? 只需在中心定义客户端可以调用的方法即可。 然后在该方法中使用HubCallerContext获取id。
本页介绍如何从客户端调用服务器:http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client
然后在集线器的方法中:
Clients.User(Context.ConnectionId).notify("Got it!");