public static IBaseServiceAgent <T> Connect <T>(string netAddress, NetworkCredential credential, out bool isNewConnect) where T : CachedServiceProxy, new() { Trace.TraceInformation(Resources.ConnectToServerGroup, netAddress); IBaseServiceAgent <T> serviceAgent; var token = CacheToken.Get(netAddress, credential.UserName).GetHashCode(); lock (SyncRoot) { if (Cache.ContainsKey(token)) { serviceAgent = (IBaseServiceAgent <T>)Cache[token]; } else { serviceAgent = ServiceProxyUtilities.CreateServiceAgent <T>(); Cache.Add(token, serviceAgent); } } var isConnected = serviceAgent.StorageProxy.IsConnected; isNewConnect = false; if (!isConnected) { isNewConnect = true; serviceAgent.Connect(netAddress, credential); var user = serviceAgent.StorageProxy.GetCurrentUser(); serviceAgent.StorageProxy.Users = user == null ? null : new string[] { user.Id }; } return(serviceAgent); }
public static void Disconnect(string netAddress, string login) { Trace.TraceInformation(Resources.DisconnectFromServerGroup, netAddress); var token = CacheToken.Get(netAddress, login).GetHashCode(); lock (SyncRoot) { IBaseServiceAgent <CachedServiceProxy> serviceAgent; if (Cache.TryGetValue(token, out serviceAgent)) { serviceAgent.Disconnect(); serviceAgent.Dispose(); Cache.Remove(token); } } }