如何在 MyClass:Hub 中存储数据

wyt*_*tes 1 c# store signalr signalr-hub

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

 Dictionary<string, string> UserAndConnectionId;
Run Code Online (Sandbox Code Playgroud)

如果用户断开连接并重新连接,他的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();
    }
}
Run Code Online (Sandbox Code Playgroud)

显然,每个新客户端都会调用onConnected函数,

_reference = new Dictionary<MyFirstObject, List<MySecondObject>>();
Run Code Online (Sandbox Code Playgroud)

每次都会清除所有数据。所以我也尝试增加int _count当我读到Debug.writeLine("Count:" + _count);时 ,我可以看到int _count每次都会被重置。

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

wyt*_*tes 5

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

private static Dictionary<MyFirstObject, List<MySecondObject>> _reference { get; set; }
Run Code Online (Sandbox Code Playgroud)

我只需添加静态属性即可让_reference进入内存并可用抛出组调用。

当作者谈论以下代码时,在asp.net/signalR上找到了该示例:

private readonly static ConnectionMapping<string> _connections = 
        new ConnectionMapping<string>();
Run Code Online (Sandbox Code Playgroud)

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