我有一个asp.net经典网站。我已经有了SignalR基本功能(一个客户端向其他客户端发送消息)。但现在我只想将消息发送到特定的connectionID。我通过stackoverflow找到了一些解决方案,但它并没有对我的代码起作用。我已经在下面分享了我的c#代码请你们好好看看吧。我的问题是我能够触发集线器方法" Static_Send"但没有办法触发js触发没有响应!任何解决方案,请...
以下是我的中心课程;
public class ChatHub : Hub
{
private static IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
public static string ConnectionID;
public void Send( string message, string connectionid)
{
Clients.Client(connectionid).addNewMessageToPage(message, connectionid);
}
public void SendProxy(string name, string message, string connectionid, IHubContext hubContext)
{
hubContext.Clients.All.addNewMessageToPage(name, message, connectionid);
}
public override Task OnConnected()
{
ConnectionID = Context.ConnectionId.ToString();
string username = Context.User.Identity.Name;
return base.OnConnected();
}
public static void Static_Send(string message, string connectionid)
{
//hubContext.Clients.All.addNewMessageToPage(name, message, connectionid);
hubContext.Clients.Client(connectionid).addNewMessageToPage(message, connectionid);
// hubContext.Clients.All.addNewMessageToPage(message, connectionid);
}
}
下面的代码是我的Mvc控制器方法的内容
public async System.Threading.Tasks.Task<ActionResult> Tetikle()
{
var hubConnection = new HubConnection("http://localhost:57714");
var hubProxy = hubConnection.CreateHubProxy("ChatHub");
await hubConnection.Start();
var connectionID = hubConnection.ConnectionId;
}
JS代码
$(function () {
var parent = window.parent.document.body;
var chat = $.connection.chatHub;
// $.connection.hub.start();
chat.client.addNewMessageToPage = function (message, connectionid) {
debugger;
console.info("11"+connectionid);
$('.dropdown-menu .listview .lv-body', parent).prepend('<a class="lv-item" href="#">' +
'<div class="media">' +
'<div class="pull-left">' +
'<img class="lv-img-sm" src="img/profile-pics/1.jpg" alt="">' +
'</div>' +
' <div class="media-body">' +
'<div class="lv-title">E-imza</div>' +
'<small class="lv-small">' + message + '</small>' +
'</div>' +
'</div>' +
'</a>');
};
$.connection.hub.start().done(function () {
debugger;
});
});
function htmlEncode(value) {
var encodedValue = $('<div />').text(value).html();
return encodedValue;
}
//});
在另一个MVC控制器中调用静态方法
[HttpPost]
public ActionResult BasvuruCreate(Ruhsat model)
{
ChatHub.Static_Send("aa", item.identity);
}
答案 0 :(得分:0)
您需要关注:
如果您了解发送和阅读https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/mapping-users-to-connections的周期,您会发现connectionID可能不是最好保留,并且您拥有用户名或某些内容然后会解析为客户端ID,然后您发送消息给他们。您可以使用连接ID尝试此操作,以至少解决代码使用已知连接ID的问题。
你有OnConnected方法,你已经获得了connectionID和username,但你没有将它存储在任何地方,所以如果用户从手机和桌面连接,用户名相同但连接ID不同。同样,如果用户从chrome和IE登录,则您将拥有两个连接ID和一个用户名。您需要解决此问题,以便从用户名获取连接ID数组,然后调用客户端方法将任何您想要的内容发送到该集线器。