2014-11-14 179 views
0

我實現的功能,通知長時間運行作業的用戶完井在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()...「在兩個地方創建這個問題。請幫助。

+0

的一件事是'$ rootScope.signalRHub.client.showNotification'定義*之前*您啓動連接。如果這沒有發生,那就可以解釋爲什麼'showNotification'沒有被調用。 – halter73 2014-11-14 20:05:59

+0

@ halter73: - 非常感謝您......我更改了代碼,並在第一頁beforw連接開始時移動了所有函數聲明,並開始工作......如果您已經在答案部分寫了這個內容,我會接受它... :P – 2014-11-17 07:28:20

回答

2

您需要在調用開始之前連線所有回調。如果您打開客戶端日誌記錄,它會告訴您您訂閱了哪些中心。

旁白: [EnableCors]是不SignalR工作的WebAPI特定屬性。你需要確保

+0

大衛你好,謝謝你的主動幫助問題解決爲「halter73」說過的知道你是誰創造signalr的傢伙,其真正awesom ...... – 2014-11-17 07:33:09

+0

你應該接受這個答案。他的回答和我的一樣,他還提供了其他有用的建議。 @dfowler無論如何都需要額外的點數:P – halter73 2014-11-17 22:38:01

+0

你是對的......完成:) – 2014-12-09 09:01:10

相關問題