Я реализую функциональность, чтобы уведомить пользователя о завершении длительной работы с использованием SignalR в приложении AngularJS. Я создал группы пользователей на основе их имени, поэтому для каждого пользователя группа его имя и различные соединения, которые он открыл, будут созданы, и он будет уведомлен его группой. Я хочу уведомить пользователя на двух страницах, например, о целевой странице и странице задания на работу, так как даже если пользователь находится на целевой странице и завершает работу, он должен быть уведомлен об этом.SignalR не передает сообщение клиенту
По той же причине я создаю группу по его имени на обеих страницах, так что, если он на какой-либо странице, ему будет отказано в группе.
на целевой странице контроллер файл я расслоение плотной написал код для добавления пользователя в группе, как следовать ...
$rootScope.signalRHub = $.connection.signalRHub;
$rootScope.hubStart = null;
$rootScope.startHub = function() {
if ($rootScope.hubStart == null)
{
$rootScope.hubStart = $.connection.hub.start();
}
return $rootScope.hubStart;
}
$scope.$on('$locationChangeStart', function (event) {
if ($rootScope.userName != "") {
$rootScope.signalRHub.server.leaveGroup($rootScope.userName);
}
});
// Start the connection
$rootScope.startHub().done(function() {
$rootScope.signalRHub.server.joinGroup($rootScope.userName);
});
на работе Run контроллер файл я расслоение плотной написал следующий код ....
$rootScope.signalRHub.client.showNotification = function (message) {
notify('Your notification message');//notify is the angular js directive injected in this controller which runs fine
};
$scope.$on('$locationChangeStart', function (event) {
$rootScope.signalRHub.server.leaveGroup($rootScope.studyid);
});
// Start the connection
$rootScope.startHub().done(function() {
$rootScope.signalRHub.server.joinGroup($rootScope.userName
});
узловом Файл .....
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class SignalRHub : Hub
{
public Task JoinGroup(string groupName)
{
return Groups.Add(Context.ConnectionId, groupName);
}
public Task LeaveGroup(string groupName)
{
return Groups.Remove(Context.ConnectionId, groupName);
}
public void ShowNotification(string jobRunDetailId, string userName)
{
if (!string.IsNullOrEmpty(userName))
{
var context = GlobalHost.ConnectionManager.GetHubContext<SignalRHub>();
context.Clients.Group(userName).showNotification(jobRunDetailId);
}
}
}
вопрос в том, когда я запустить приложение в группу dd для обеих страниц работает отлично. Но когда я вызываю «showNotification» из Hub, он не показывает никакого сообщения.
Но странно, если я прокомментирую функцию «$ rootScope.startHub(). Done ....» на целевой странице, тогда функция уведомления об уведомлениях на странице jobrun работает нормально. Я не уверен, что пишу «$ rootScope.startHub() .done() ... "на двух местах создает эту проблему. help.
Прежде всего вам нужно убедиться, что '$ rootScope.signalRHub.client.showNotification' определен * перед *, вы начинаете свое соединение. Если этого не происходит, это объясняет, почему вызов showNotification не вызывается. – halter73
@ halter73: - Большое спасибо ... я изменил код и переместил объявление всех функций на первой странице перед началом соединения, и он начал работать ... если вы написали это в разделах ответов, я бы принял это ... : P –