在signalR的hub类中维护对象的实例

ant*_*liu 1 c# asp.net asp.net-mvc-3 signalr

我目前的hub类有以下代码:

public class MatchMaker : Hub
    {    


    private List<SoloUser> soloUsers = new List<SoloUser>();

    //Client Requests
    public void findNewPartner(string Country, string State)
    {
        SoloUser soloUser = soloUsers.FirstOrDefault(s => (s.Country== Country) && (s.State == State));
        if (soloUsers.Count > 0)
            Clients.partnerRequestResult(soloUsers.FirstOrDefault());
        else
        {
            soloUser = new SoloUser { 
                Major = Major,
                School = School,
                SessionId = SessionId,
                Token = token
            };
            soloUsers.Add(soloUser);
        }



    }
}
Run Code Online (Sandbox Code Playgroud)

问题是每当我在客户端调用此方法时,向我的soloUsers集合中添加SoloUser对象不会保存,因此当另一个用户再次调用此函数时,linq语句(soloUsers.FirstOrDefault(s => (s.School == School) && (s.Major == Major)))永远不会找到SoloUser.我该怎么做才能使我的soloUsers集合保存实例和添加到它的对象?

Ale*_*ger 6

SignalR会为每一个电话你做(这点是非常轻便,不用担心)的新枢纽的实例,因此不调用之间持续存在的soloUsers列表.

使列表静态以解决此问题.请注意,在访问列表时需要某种锁定,或者使用其中一个并发集合来使其保证线程安全.