我實現的功能,通知長時間運行作業的用戶完井在AngularJS application.I使用SignalR已經根據他們的名字創建的用戶羣體,所以對於每個用戶組的他姓名和他打開的不同connectionids將被創建,並且他將被他的小組通知。我想在兩個頁面上通知用戶,即登錄頁面和作業運行頁面,即使用戶處於登錄頁面,並且作業運行完成後應該通知他。SignalR不Push消息發送給客戶端
,因爲我是他的名字都在頁面上創建組,同樣的原因,所以,如果他是在任何網頁上,他將通過組nofied。
在登陸頁面控制器js文件我寫的代碼添加的用戶組如下...
$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);
});
上作業運行控制器JS文件下面的代碼我已經寫了....
$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」時,它不顯示任何消息。
但奇怪的是,如果我在着陸頁上評論「$ rootScope.startHub()。done ....」功能,那麼jobrun頁面通知功能就可以正常工作。我不確定是否編寫了「$ rootScope.startHub ().done()...「在兩個地方創建這個問題。請幫助。
的一件事是'$ rootScope.signalRHub.client.showNotification'定義*之前*您啓動連接。如果這沒有發生,那就可以解釋爲什麼'showNotification'沒有被調用。 – halter73 2014-11-14 20:05:59
@ halter73: - 非常感謝您......我更改了代碼,並在第一頁beforw連接開始時移動了所有函數聲明,並開始工作......如果您已經在答案部分寫了這個內容,我會接受它... :P – 2014-11-17 07:28:20