检索连接到服务器的在线用户的名称

时间:2012-12-06 11:58:08

标签: asp.net signalr

我问过这个question之前得到了很好的回应。但由于我是asp.net(和jquery)的新手,因此无法理解程序是如何流动的。

摘要:

  

我创建了一个基本聊天应用程序。现在我正在尝试添加高级功能,例如每当用户在线(连接到服务器)时,服务器应该向连接到该服务器的所有用户显示或广播可用的在线用户的用户名。

通过引用上一个问题(s0nicaVinayC)的回复,我修改了我的class文件和jquery文件,这些文件出现错误,如下所示以下链接。 (我想我非常接近)

  

Chat.cs两个错误,我提到了代码注释之间的错误
     file.js工作正常,如果您需要,请参阅

请查看上述文件并协助我。

PS:在上一篇文章中,我在想如果我改变Global.asax代码,我的问题就会得到解决..后来我意识到这个问题是错误的。

1 个答案:

答案 0 :(得分:1)

您的第一个错误:

Clients.joins(Context.ConnectionId, Caller.username, DateTime.Now);

Shold be:

Clients.All.joins(Context.ConnectionId, Clients.Caller.username, DateTime.Now);

与之相关的其他错误:在您的JS文件中,它应该是: 第15行

chat.state.username = chatUsername;

第二个错误: 错误就像它所说的那样,你的字典对象没有toList函数。其次,您无法将List或字符串直接转换为Chat对象。

根据您的设置,您目前没有合适的“用户”列表可以返回。现在,您要保存一个List来代表一个用户。您可能想尝试将字典对象更改为

static ConcurrentDictionary<string, User> _users = new ConcurrentDictionary<string, User>();

用户在哪里:

public class User
{
    public string Name { get; set; }
    public string ConnectionID { get; set; }
}

然后在你的加入功能上你可以做到:

public void Joined()
{
    User user = new User 
    { 
        Name = Clients.Caller.username,
        ConnectionID = Context.ConnectionId
    };

    _users.TryAdd(user.ConnectionID, user);
    Clients.All.joins(user.ConnectionID, user.Name, DateTime.Now);
}

最后你的GetConnectedUsers会结束(确保你'使用System.Linq;'):

public List<User> GetConnectedUsers()
{
    return _users.Values.ToList();
}

我可能有点过火但希望这有帮助!

如果您需要参考SignalR 0.5.3到1.0 alpha的更改日志,这里有一篇关于所有修改的精彩文章: http://weblogs.asp.net/davidfowler/archive/2012/11/11/microsoft-asp-net-signalr.aspx