public void Add(ServiceRequest request, ServiceIdentity identity) { string key = GetKeyString(request); identity.Key = key; //插入到全局缓存 ResetIdentityKeyList(); IdentityKeyList.Add(key); Cache.Insert <List <string> >(KeyListFlag, IdentityKeyList); Cache.Insert <ServiceIdentity>(key, identity, new System.Runtime.Caching.CacheItemPolicy() { SlidingExpiration = identity.Expire }); }
/// <summary> /// 移除指定的标识 /// </summary> /// <param name="identity"></param> /// <returns></returns> public bool Remove(ServiceIdentity identity) { ServiceIdentity item = this.Cache.Get <ServiceIdentity>(identity.Key); if (item != null && item.Key == identity.Key) { this.Cache.Remove(identity.Key); ResetIdentityKeyList(); IdentityKeyList.Remove(identity.Key);//从全局缓存移除 Cache.Insert <List <string> >(KeyListFlag, IdentityKeyList); return(true); } return(false); }
/// <summary> /// 获取系统中的所有服务凭据 /// </summary> /// <returns></returns> public List <ServiceIdentity> GetAllIdentitys() { List <ServiceIdentity> list = new List <ServiceIdentity>(); List <string> keyList = this.IdentityKeyList; foreach (string key in keyList.ToArray()) { ServiceIdentity item = this.Cache.Get <ServiceIdentity>(key); if (item != null) { list.Add(item); } } return(list); }
/// <summary> /// 根据已有的标识,寻找容器中对应的标识对象 /// </summary> /// <param name="identity"></param> /// <returns></returns> public ServiceIdentity Find(ServiceIdentity identity) { List <string> keyList = this.IdentityKeyList; foreach (string key in keyList.ToArray()) { ServiceIdentity item = this.Cache.Get <ServiceIdentity>(key); if (item != null) { if (item.Id == identity.Id && item.Name == identity.Name) { return(item); } } else { //从全局缓存移除 ResetIdentityKeyList(); IdentityKeyList.Remove(key); Cache.Insert <List <string> >(KeyListFlag, IdentityKeyList); } } return(null); }
/// <summary> /// 取消指定的凭据 /// </summary> /// <param name="identity"></param> /// <returns></returns> public bool SignOut(ServiceIdentity identity) { return(ServiceIdentityContainer.Instance.Remove(identity)); }
/// <summary> /// 根据指定的标识,查找服务标识容器是否存在对应的标识对象,如果存在,则返回容器中的标识对象 /// </summary> /// <param name="identity"></param> /// <returns>如果未找到,返回空</returns> public ServiceIdentity FindIdentity(ServiceIdentity identity) { identity.Key = ServiceIdentityContainer.Instance.GetKeyString(this.currentContext.Request); return(ServiceIdentityContainer.Instance.Find(identity)); }
/// <summary> /// (在当前会后中)设置用户凭据。(凭据保存到系统缓存中,供相同的客户机各个连接使用) /// </summary> /// <param name="user"></param> public void Authenticate(ServiceIdentity user) { ServiceIdentityContainer.Instance.Add(this.currentContext.Request, user); }