如何在MyClass:Hub中存储数据

时间:2013-11-20 15:24:39

标签: c# signalr store signalr-hub

我正在使用signalR创建一个项目,我想存储一些数据,例如:

 Dictionary<string, string> UserAndConnectionId;

如果用户断开连接并重新连接,他的 connectionId 将会改变,我想根据他的激活组设置他的界面。

所以,我创建了这个类:Hub和一些函数:

public class MyClass: Hub
{
    private Dictionary<MyFirstObject, List<MySecondObject>> _reference { get; set; }
    private int _count;

    [HubMethodName("onConnected")]
    public override Task OnConnected()
    {
        Debug.WriteLine("OnConnected");
        List<MySecondObject> userList;

        _reference = new Dictionary<MyFirstObject, List<MySecondObject>>();
        userList = new List<MySecondObject>();
        userList.Add(new MySecondObject("userId", "userName", Context.ConnectionId));
        _reference.Add(new MyFirstObject("groupName", null), userList);

        _count++;
        return base.OnConnected();
    }

    [HubMethodName("onDisconnected")]
    public override Task OnDisconnected()
    {
        Debug.WriteLine("OnDisconnected");
        return base.OnDisconnected();
    }

    [HubMethodName("onReconnected")]
    public override Task OnReconnected()
    {
        Debug.WriteLine("OnReconnected");
        return base.OnReconnected();
    }
}

显然,每个新客户都会调用 onConnected 功能和

_reference = new Dictionary<MyFirstObject, List<MySecondObject>>();

每次都会删除所有数据。 所以我也尝试增加 int _count 。 当我读到 Debug.writeLine(“Count:”+ _count); 时,我发现每次都会重置 int _count

您是否有想暂时存储一些数据,例如MyClass中的 Dictionary<string, string>

1 个答案:

答案 0 :(得分:4)

我在多个asp.net示例中找到了我的解决方案:

private static Dictionary<MyFirstObject, List<MySecondObject>> _reference { get; set; }

我只需要添加静态属性,让内存中的 _reference 可用,并抛出群组调用。

示例见于:asp.net/signalR 当作者谈到以下代码时:

private readonly static ConnectionMapping<string> _connections = 
        new ConnectionMapping<string>();

我希望它能帮助其他人:)