0

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

概括:

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

通过参考对上一个问题(s0nicaVinayC)的回复,我修改了我的class文件和jquery文件,它们给出了错误,如下面的链接所示。(我想我很接近)

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

请查看上述文件并为我提供帮助。

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

4

1 回答 1

1

您的第一个错误来自:

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

应为:

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

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

chat.state.username = chatUsername;

第二个错误: 错误与它所说的完全一样,您的字典对象没有 toList 函数。其次,您不能将 List 或字符串直接转换为 Chat 对象。

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

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

用户在哪里:

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

然后在您的 Joined 功能上,您可以执行以下操作:

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

于 2012-12-06T19:01:21.357 回答