public static ClientLink CreateConnection(string wcfendpoint, string pluginname) { try { ClientLink link; lock (ClientLinkDic) { if (ClientLinkDic.ContainsKey(pluginname)) { return(ClientLinkDic[pluginname]); } link = new ClientLink(null, pluginname, wcfendpoint); ClientLinkDic.Add(pluginname, link); } link.CreateConnection(null, ((ism, met) => { IsMessage = ism; MessageTime = met; })); link.clientObj.Token = Token;//赋值令牌 return(link); } catch (Exception err) { throw new Exception(err.Message); } }
/// <summary> /// 踢掉一个非当前契约的空闲连接 /// </summary> /// <returns></returns> public bool RemovePoolOneNotAt(string pluginname, out ClientLink clientlink, out int?Index) { bool flag = false; Index = null; clientlink = null; lock (lockhelper) { int len = poollist.Count; //如果池子满了,先踢出一个非当前创建契约的连接 if (poollist.Count >= this.wcfMaxPoolSize) { for (int i = 0; i < poollist.Count; i++) { ClientLink obj = poollist[i]; if (!obj.IsUsed && obj.PluginName != pluginname) { obj.Dispose(); poollist.Remove(obj); if (countNumsDic.ContainsKey(obj.PluginName)) { countNumsDic[obj.PluginName] = countNumsDic[obj.PluginName] == 0 ? 0 : countNumsDic[obj.PluginName] - 1; } if (usedNumsDic.ContainsKey(obj.PluginName)) { usedNumsDic[obj.PluginName] = usedNumsDic[obj.PluginName] == 0 ? 0 : usedNumsDic[obj.PluginName] - 1; } flag = true; i--; break; } } } //增加一个连接到池子 if (poollist.Count < this.wcfMaxPoolSize) { clientlink = new ClientLink(pluginname); clientlink.CreateConnection(); index = index >= Int32.MaxValue ? 1 : index + 1; Index = index; clientlink.Index = index; clientlink.UsedNums = 1; clientlink.CreatedTime = DateTime.Now; clientlink.LastUsedTime = DateTime.Now; clientlink.IsUsed = true; //obj.Scope = new OperationContextScope(((IClientChannel)channel)); poollist.Add(clientlink); countNumsDic[clientlink.PluginName] = countNumsDic.ContainsKey(clientlink.PluginName) ? countNumsDic[clientlink.PluginName] + 1 : 1; usedNumsDic[clientlink.PluginName] = usedNumsDic.ContainsKey(clientlink.PluginName) ? usedNumsDic[clientlink.PluginName] + 1 : 1; flag = true; } } return(flag); }
/// <summary> /// 加入连接池 /// </summary> /// <param name="clientlink">连接</param> /// <param name="Index">返回的连接池索引</param> /// <returns></returns> public bool AddPool(string pluginname, out ClientLink clientlink, out int?Index) { //做一次清理 //if (isReap) // ReapPool(); bool flag = false; Index = null; clientlink = null; if (poollist.Count < this.wcfMaxPoolSize) { lock (lockhelper) { OpeningNumDic[pluginname] = OpeningNumDic.ContainsKey(pluginname) ? OpeningNumDic[pluginname] + 1 : 0; if (poollist.Count < this.wcfMaxPoolSize) { clientlink = new ClientLink(pluginname); index = index >= Int32.MaxValue ? 1 : index + 1; Index = index; clientlink.Index = index; clientlink.UsedNums = 1; clientlink.CreatedTime = DateTime.Now; clientlink.LastUsedTime = DateTime.Now; clientlink.IsUsed = true; //obj.Scope = new OperationContextScope(((IClientChannel)channel)); poollist.Add(clientlink); countNumsDic[clientlink.PluginName] = countNumsDic.ContainsKey(clientlink.PluginName) ? countNumsDic[clientlink.PluginName] + 1 : 1; usedNumsDic[clientlink.PluginName] = usedNumsDic.ContainsKey(clientlink.PluginName) ? usedNumsDic[clientlink.PluginName] + 1 : 1; flag = true; clientlink.CreateConnection(); } OpeningNumDic[pluginname] = OpeningNumDic.ContainsKey(pluginname) ? OpeningNumDic[pluginname] - 1 : 0; } } return(flag); }
/// <summary> /// 创建wcf服务连接 /// </summary> public static ClientLink CreateConnection(string pluginname) { try { if (ClientLinkDic.ContainsKey(pluginname)) { return(ClientLinkDic[pluginname]); } ClientLink link = new ClientLink(null, pluginname, ((ism, met) => { IsMessage = ism; MessageTime = met; })); link.CreateConnection(); link.mConn.Token = Token;//赋值令牌 ClientLinkDic.Add(pluginname, link); return(link); } catch (Exception err) { throw new Exception(err.Message); } }
/// <summary> /// 创建wcf服务连接,此方式一个服务只有一个连接 /// </summary> public static ClientLink CreateConnection(string pluginname) { try { ClientLink link; lock (ClientLinkDic) { if (ClientLinkDic.ContainsKey(pluginname)) { return(ClientLinkDic[pluginname]); } link = new ClientLink(null, pluginname, null); ClientLinkDic.Add(pluginname, link); } link.CreateConnection(); //link.clientObj.Token = Token;//赋值令牌 return(link); } catch (Exception err) { throw new Exception(err.Message); } }