ПЕРВЫЙ МЕТОД Первое решение измените свой код JavaScript следующим образом.Если это не работает, перейдите ко второму способу:
$(function () {
var activityFromHub = $.connection.ActivityHub;
$.connection.hub.start().done(function () {
FetchLogs();
});
activityFromHub.client.displayLog = function () {
console.log('Hub Started');
FetchLogs();
}
});
ВТОРОЙ МЕТОД:
Каждый клиент, подключающийся к концентратору, передает уникальный идентификатор соединения.Вы можете получить это значение в свойстве Context.ConnectionId контекста концентратора.И я обнаружил, что ничего подобного не происходит.Вы можете попробовать это решение.
Я думаю, что самым простым решением для вашего вопроса является использование групп.http://www.asp.net/signalr/overview/guide-to-the-api/working-with-groups
Ваш класс-концентратор будет содержать методы для присоединения к группе:
public Task JoinGroup(string groupName)
{
return Groups.Add(Context.ConnectionId, groupName);
}
public Task LeaveGroup(string groupName)
{
return Groups.Remove(Context.ConnectionId, groupName);
}
, и ваш концентратор будет выглядеть следующим образом:
public static void StartLogging(string groupName)
{
IHubContext context = GlobalHost.ConnectionManager.GetHubContext<ActivityHub>();
context.Clients.Group(groupName).displayLog();
//calls the signalR client part to execute javascript method
//context.Clients.All.displayLog();
}
И измените свойjavascript как это:
$(function () {
var activityFromHub = $.connection.ActivityHub;
$.connection.hub.start().done(function () {
activityFromHub.server.joinGroup("Group1");
activityFromHub.server.StartLogging("Group1");
FetchLogs();
});
activityFromHub.client.displayLog = function () {
console.log('Hub Started');
FetchLogs();
}
});
Я надеюсь, что это решит вашу проблему.Если вы все еще сталкиваетесь с проблемой.Пожалуйста, оставляйте комментарии.Спасибо.