示例#1
0
        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);
        }
示例#2
0
        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);
                }
            }
        }