예제 #1
0
        /// <summary>
        ///     获取实例节点
        ///     这里将形成左侧的树型目录
        /// </summary>
        /// <param name="mongoConnKey"></param>
        /// <param name="config">由于是结构体,必须ref</param>
        /// <param name="mongoConn"></param>
        /// <param name="mMasterServerInstace"></param>
        /// <param name="userList"></param>
        /// <returns></returns>
        private static TreeNode GetInstanceNode(string mongoConnKey, ref MongoConnectionConfig config,
                                                MongoClient mongoClient)
        {
            //无论如何,都改为主要服务器读优先
            var svrInstanceNode = new TreeNode();
            var connSvrKey      = mongoConnKey + "/" + mongoConnKey;

            svrInstanceNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.WebServer;
            svrInstanceNode.ImageIndex         = (int)GetSystemIcon.MainTreeImageType.WebServer;
            svrInstanceNode.Text = "Server";
            if (!string.IsNullOrEmpty(config.UserName) & (!string.IsNullOrEmpty(config.Password)))
            {
                //是否是认证模式,应该取决于服务器!
                config.AuthMode = true;
            }
            //获取ReadOnly
            config.IsReadOnly = false;
            if (!string.IsNullOrEmpty(config.DataBaseName))
            {
                //单数据库模式
                var mongoSingleDbNode = FillDataBaseInfoToTreeNode(config.DataBaseName,
                                                                   mongoConnKey + "/" + mongoConnKey, null);
                mongoSingleDbNode.Tag = ConstMgr.SingleDatabaseTag + ":" + connSvrKey + "/" + config.DataBaseName;
                mongoSingleDbNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database;
                mongoSingleDbNode.ImageIndex         = (int)GetSystemIcon.MainTreeImageType.Database;
                svrInstanceNode.Nodes.Add(mongoSingleDbNode);
                svrInstanceNode.Tag = ConstMgr.SingleDbServerTag + ":" + connSvrKey;
            }
            else
            {
                var setting          = RuntimeMongoDbContext.CreateMongoClientSettingsByConfig(ref config);
                var client           = new MongoClient(setting);
                var databaseNameList = GetConnectionInfo.GetDatabaseList(client);
                foreach (var strDbName in databaseNameList)
                {
                    TreeNode mongoDbNode;
                    try
                    {
                        var dbName = strDbName.GetElement("name").Value.ToString();
                        mongoDbNode                    = FillDataBaseInfoToTreeNode(dbName, connSvrKey, client);
                        mongoDbNode.ImageIndex         = (int)GetSystemIcon.MainTreeImageType.Database;
                        mongoDbNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database;
                        svrInstanceNode.Nodes.Add(mongoDbNode);
                    }
                    catch (Exception ex)
                    {
                        Utility.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);
                    }
                }
            }
            svrInstanceNode.Tag = ConstMgr.ServerTag + ":" + mongoConnKey + "/" + mongoConnKey;
            return(svrInstanceNode);
        }
예제 #2
0
        /// <summary>
        ///     获取实例节点
        ///     这里将形成左侧的树型目录
        /// </summary>
        /// <param name="mongoConnKey"></param>
        /// <param name="config">由于是结构体,必须ref</param>
        /// <param name="mongoConn"></param>
        /// <param name="mMasterServerInstace"></param>
        /// <param name="userList"></param>
        /// <returns></returns>
        private static TreeNode GetInstanceNode(string mongoConnKey, ref MongoConnectionConfig config,
                                                MongoClient mongoClient)
        {
            //无论如何,都改为主要服务器读优先
            var svrInstanceNode = new TreeNode();
            var connSvrKey      = mongoConnKey + "/" + mongoConnKey;

            svrInstanceNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.WebServer;
            svrInstanceNode.ImageIndex         = (int)GetSystemIcon.MainTreeImageType.WebServer;
            svrInstanceNode.Text = "Server";
            if (!string.IsNullOrEmpty(config.UserName) & !string.IsNullOrEmpty(config.Password))
            {
                //是否是认证模式,应该取决于服务器!
                config.AuthMode = true;
            }
            //获取ReadOnly
            config.IsReadOnly = false;
            if (!string.IsNullOrEmpty(config.DataBaseName) && (!config.DataBaseName.Equals(ConstMgr.DatabaseNameAdmin)))
            {
                //单数据库模式
                var mongoSingleDbNode = FillDataBaseInfoToTreeNode(config.DataBaseName,
                                                                   mongoConnKey + "/" + mongoConnKey, mongoClient);
                mongoSingleDbNode.Tag = ConstMgr.SingleDatabaseTag + ":" + connSvrKey + "/" + config.DataBaseName;
                mongoSingleDbNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database;
                mongoSingleDbNode.ImageIndex         = (int)GetSystemIcon.MainTreeImageType.Database;
                svrInstanceNode.Nodes.Add(mongoSingleDbNode);
                svrInstanceNode.Tag = ConstMgr.SingleDbServerTag + ":" + connSvrKey;
            }
            else
            {
                var setting = RuntimeMongoDbContext.CreateMongoClientSettingsByConfig(ref config);
                var client  = new MongoClient(setting);
                //这里MongoServerInstanceType和SvrRoleType的概念有些重叠
                client.GetServer().Connect();

                if (!string.IsNullOrEmpty(client.GetServer().ReplicaSetName))
                {
                    //如果是副本的话Instance则无效,Instance(s)有效
                    config.ServerRole = MongoConnectionConfig.SvrRoleType.ReplsetSvr;
                }
                else
                {
                    if (client.GetServer().Instance.InstanceType == MongoServerInstanceType.ShardRouter)
                    {
                        //无法获得数据库列表
                        config.ServerRole = MongoConnectionConfig.SvrRoleType.ShardSvr;
                    }
                }
                var databaseNameList = ConnectionInfo.GetDatabaseInfoList(client);
                foreach (var DbPropertyDoc in databaseNameList)
                {
                    TreeNode mongoDbNode;
                    try
                    {
                        var dbName = DbPropertyDoc.GetElement("name").Value.ToString();
                        mongoDbNode                    = FillDataBaseInfoToTreeNode(dbName, connSvrKey, client);
                        mongoDbNode.ImageIndex         = (int)GetSystemIcon.MainTreeImageType.Database;
                        mongoDbNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database;
                        svrInstanceNode.Nodes.Add(mongoDbNode);
                    }
                    catch (Exception)
                    {
                        //Utility.ExceptionDeal(ex, strDbName + "Exception", strDbName + "Exception");
                        mongoDbNode = new TreeNode(DbPropertyDoc.GetElement("name").Value.ToString() + "(Exception)")
                        {
                            ImageIndex         = (int)GetSystemIcon.MainTreeImageType.Database,
                            SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database
                        };
                        svrInstanceNode.Nodes.Add(mongoDbNode);
                    }
                }
            }
            svrInstanceNode.Tag = ConstMgr.ServerTag + ":" + mongoConnKey + "/" + mongoConnKey;
            return(svrInstanceNode);
        }