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 中的数据?
我在多个 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)
我希望它能帮助其他人:)