2017-04-16 56 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方法。

希望这可以帮助别人