2013-04-11 55 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