/// <summary> /// 获取实例节点 /// </summary> /// <param name="mongoConnKey"></param> /// <param name="config">由于是结构体,必须ref</param> /// <param name="mongoConn"></param> /// <param name="mMasterServerInstace"></param> /// <param name="mServer"></param> /// <param name="UserList"></param> /// <returns></returns> private static TreeNode GetInstanceNode(String mongoConnKey, ref ConfigHelper.MongoConnectionConfig config, MongoServer mongoConn, MongoServerInstance mMasterServerInstace, MongoServer mServer, EachDatabaseUser UserList) { bool isReplsetMasterServer = mMasterServerInstace == null; //无论如何,都改为主要服务器读优先 var svrInstanceNode = new TreeNode(); String connSvrKey; connSvrKey = isReplsetMasterServer ? mongoConnKey + "/" + mongoConnKey : mongoConnKey + "/" + mMasterServerInstace.Address.ToString().Replace(":", "@"); svrInstanceNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.WebServer; svrInstanceNode.ImageIndex = (int)GetSystemIcon.MainTreeImageType.WebServer; svrInstanceNode.Text = isReplsetMasterServer ? "Connection" : "Server[" + mMasterServerInstace.Address + "]"; if (!String.IsNullOrEmpty(config.UserName) & (!String.IsNullOrEmpty(config.Password))) { //是否是认证模式,应该取决于服务器! config.AuthMode = true; } //获取ReadOnly config.IsReadOnly = false; List <string> databaseNameList; if (!String.IsNullOrEmpty(config.DataBaseName)) { //单数据库模式 TreeNode mongoSingleDbNode; mongoSingleDbNode = isReplsetMasterServer ? FillDataBaseInfoToTreeNode(config.DataBaseName, mServer, mongoConnKey + "/" + mongoConnKey) : FillDataBaseInfoToTreeNode(config.DataBaseName, mServer, mongoConnKey + "/" + mMasterServerInstace.Address); mongoSingleDbNode.Tag = MongoDbHelper.SINGLE_DATABASE_TAG + ":" + connSvrKey + "/" + config.DataBaseName; mongoSingleDbNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database; mongoSingleDbNode.ImageIndex = (int)GetSystemIcon.MainTreeImageType.Database; svrInstanceNode.Nodes.Add(mongoSingleDbNode); svrInstanceNode.Tag = MongoDbHelper.SINGLE_DB_SERVER_TAG + ":" + connSvrKey; //获取User信息 if (config.AuthMode) { try { //尝试添加用户信息 UserList.AddUser(mongoConn.GetDatabase(config.DataBaseName), config.UserName); } catch { //可能出现没有权限的问题,这里就认为无法取得权限 } } } else { MongoServer instantSrv; if (isReplsetMasterServer) { instantSrv = mServer; databaseNameList = mServer.GetDatabaseNames().ToList(); } else { MongoClientSettings setting = MongoDbHelper.CreateMongoClientSettingsByConfig(ref config); setting.ConnectionMode = ConnectionMode.Direct; //When Replset Case,Application need to read admin DB information //if Primary,there will be exception setting.ReadPreference = ReadPreference.PrimaryPreferred; setting.Server = mMasterServerInstace.Address; instantSrv = new MongoClient(setting).GetServer(); databaseNameList = instantSrv.GetDatabaseNames().ToList(); } foreach (String strDbName in databaseNameList) { TreeNode mongoDbNode; try { mongoDbNode = FillDataBaseInfoToTreeNode(strDbName, instantSrv, connSvrKey); mongoDbNode.ImageIndex = (int)GetSystemIcon.MainTreeImageType.Database; mongoDbNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database; svrInstanceNode.Nodes.Add(mongoDbNode); if (config.AuthMode) { try { //尝试添加用户信息 UserList.AddUser(mongoConn.GetDatabase(strDbName), config.UserName); } catch { //可能出现没有权限的问题,这里就认为无法取得权限 } } } catch (Exception ex) { SystemManager.ExceptionDeal(ex, strDbName + "Exception", strDbName + "Exception"); mongoDbNode = new TreeNode(strDbName + " (Exception)") { ImageIndex = (int)GetSystemIcon.MainTreeImageType.Database, SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database }; svrInstanceNode.Nodes.Add(mongoDbNode); } } if (isReplsetMasterServer) { svrInstanceNode.Tag = MongoDbHelper.SERVER_TAG + ":" + mongoConnKey + "/" + mongoConnKey; } else { if (mongoConn.ReplicaSetName != null) { svrInstanceNode.Tag = MongoDbHelper.SERVER_REPLSET_MEMBER_TAG + ":" + mongoConnKey + "/" + mMasterServerInstace.Address.ToString().Replace(":", "@"); } } } if (MongoDbHelper._mongoInstanceLst.ContainsKey(connSvrKey)) { MongoDbHelper._mongoInstanceLst.Remove(connSvrKey); } if (!isReplsetMasterServer) { MongoDbHelper._mongoInstanceLst.Add(connSvrKey, mMasterServerInstace); } return(svrInstanceNode); }