2017-04-16 118 views
0

我正嘗試在集線器環境之外使用呼叫方法。我有一個輔助類廣播消息,像這樣所有的用戶時,工作正常:SignalR:在集線器環境之外使用呼叫方法

hub.Clients.All.newLessonAlert(notif); 

它不會允許我使用這個類內來電方法,但能正常工作的樞紐上下文類。爲什麼是這樣?我也試圖將所有我的函數上下文類內,但現在我得到這個unhanded例外:

使用不是由HubPipeline創建一個樞紐實例是不受支持的

有沒有一種簡單的方法繼續使用我的助手類並確定與集線器的連接?

回答

1

我通過以下方式解決了這個:

  1. 我在集線器類創建的OnConnected方法。這將當前連接的用戶分配給一個組。

    [HubName("NotificationsHub")] 
    

    公共類NotificationHub:集線器 { 私有靜態IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext();

    public override Task OnConnected() 
    { 
        string userid = Context.Request.User.Identity.GetUserId(); 
        Groups.Add(Context.ConnectionId, userid); 
        return base.OnConnected(); 
    } 
    

    }

  2. 改性我HubHelper類到現在廣播該警報到當前連接的用戶(通過用戶的ID指定)

    public void HighScoreAlert(int gameid, int score, string userID) 
    { 
        string message = "High Score achieved on " + gameid; 
    
        hub.Clients.Group(userID).score(message); 
    } 
    
  3. 對於控制器動作我通過在用戶的ID,然後調用上面提到的HubHelper方法。

希望這可以幫助別人