2013-04-11 20 views
1

我試圖創建一個使用SignalR的聊天應用程序。爲了使發送私人消息成爲可能,我想將客戶端分配給一個名爲profileID的組。所以我可以簡單地調用組的addMessage函數發送給特定的客戶端。SignalR:任務加入()不叫

當我去這個頁面:https://github.com/SignalR/SignalR/wiki/Hubs

它告訴我添加到集線器的功能稱爲加入()。在這裏,我可以將接收客戶添加到一個組中。所以我創造了這個代碼:

[HubName("Chat")] 
    public class ChatHub : Hub 
    { 
      public Task Join() 
      { 
        if (HttpContext.Current.User.Identity.IsAuthenticated) 
        { 
          Profiel_DataHelper profiel = new Profiel_DataHelper(HttpContext.Current.User.Identity.Name); 
          return Groups.Add(Context.ConnectionId, profiel.ProfielID.ToString()); 
        } 
        else 
        { 
          return null; 
        } 
      } 

.....

當我想打電話給一個特定的客戶端我用這個代碼:

var context = GlobalHost.ConnectionManager.GetHubContext(); 
    context.Clients.Group(profielidNaar).addTyptOnline(profielidVan); 

但是當我運行程序的加入()任務根本沒有被調用,因此我對該組的調用也不起作用。

我在做什麼錯?

回答

1

加入是您需要從客戶端調用的集線器上的一種方法。沒有人會給你打電話,「加入」不是一個自動調用的特殊方法。該文檔向您展示瞭如何聲明可以從客戶端調用「可以」的方法。

還有其他的方法來知道什麼時候客戶端連接,重新連接和斷開與它這裏詳細: https://github.com/SignalR/SignalR/wiki/Hubs#detecting-connect-reconnect-and-disconnect-clients-in-hubs

+0

是的,這個工作,只有在「onconnected」事件添加客戶端將無法正常工作。你必須真正從客戶端調用它。我的代碼的問題是我忘記了。服務器。在對Join方法的調用中。 – ikwillem 2013-04-15 11:46:46

+0

看到你沒有顯示客戶端代碼,我不會知道:) – davidfowl 2013-04-15 13:49:11