コード例 #1
0
ファイル: ReplicaSet.cs プロジェクト: magicdict/MongoCola
 /// <summary>
 ///     刷新配置文件副本状态
 /// </summary>
 /// <param name="newConfig"></param>
 public static void RefreshConnectionConfig(MongoConnectionConfig newConfig)
 {
     MongoConnectionConfig.MongoConfig.ConnectionList[newConfig.ConnectionName] = newConfig;
     MongoConnectionConfig.MongoConfig.SaveMongoConfig();
     RuntimeMongoDbContext.MongoConnSvrLst.Remove(newConfig.ConnectionName);
     RuntimeMongoDbContext.MongoConnSvrLst.Add(RuntimeMongoDbContext.CurrentMongoConnectionconfig.ConnectionName,
         RuntimeMongoDbContext.CreateMongoServer(ref newConfig));
 }
コード例 #2
0
        /// <summary>
        ///     根据服务器名称获取配置
        /// </summary>
        /// <param name="mongoSvrKey"></param>
        /// <returns></returns>
        public static MongoConnectionConfig GetServerConfigBySvrPath(string mongoSvrKey)
        {
            var rtnMongoConnectionConfig = new MongoConnectionConfig();

            if (MongoConnectionConfigList.ContainsKey(mongoSvrKey))
            {
                rtnMongoConnectionConfig = MongoConnectionConfigList[mongoSvrKey];
            }
            return(rtnMongoConnectionConfig);
        }
コード例 #3
0
 /// <summary>
 ///     Set ReadPreference And WriteConcern
 /// </summary>
 /// <param name="clientsettings"></param>
 /// <param name="config"></param>
 private static void SetReadPreferenceWriteConcern(MongoClientSettings clientsettings,
                                                   MongoConnectionConfig config)
 {
     if (config.ReadPreference == ReadPreference.Primary.ToString())
     {
         clientsettings.ReadPreference = ReadPreference.Primary;
     }
     if (config.ReadPreference == ReadPreference.PrimaryPreferred.ToString())
     {
         clientsettings.ReadPreference = ReadPreference.PrimaryPreferred;
     }
     if (config.ReadPreference == ReadPreference.Secondary.ToString())
     {
         clientsettings.ReadPreference = ReadPreference.Secondary;
     }
     if (config.ReadPreference == ReadPreference.SecondaryPreferred.ToString())
     {
         clientsettings.ReadPreference = ReadPreference.SecondaryPreferred;
     }
     if (config.ReadPreference == ReadPreference.Nearest.ToString())
     {
         clientsettings.ReadPreference = ReadPreference.Nearest;
     }
     //Default ReadPreference is Primary
     //安全模式
     if (config.WriteConcern == WriteConcern.Unacknowledged.ToString())
     {
         clientsettings.WriteConcern = WriteConcern.Unacknowledged;
     }
     if (config.WriteConcern == WriteConcern.Acknowledged.ToString())
     {
         clientsettings.WriteConcern = WriteConcern.Acknowledged;
     }
     if (config.WriteConcern == WriteConcern.W2.ToString())
     {
         clientsettings.WriteConcern = WriteConcern.W2;
     }
     if (config.WriteConcern == WriteConcern.W3.ToString())
     {
         clientsettings.WriteConcern = WriteConcern.W3;
     }
     //remove from mongodrvier 2.0.0
     //if (config.WriteConcern == WriteConcern.W4.ToString())
     //{
     //    mongoSvrSetting.WriteConcern = WriteConcern.W4;
     //}
     if (config.WriteConcern == WriteConcern.WMajority.ToString())
     {
         clientsettings.WriteConcern = WriteConcern.WMajority;
     }
     //Default WriteConcern is w=0
 }
コード例 #4
0
        /// <summary>
        ///     获得当前服务器配置
        /// </summary>
        /// <returns></returns>
        public static MongoConnectionConfig GetCurrentServerConfig()
        {
            var serverName = SelectObjectTag.Split(":".ToCharArray())[1];

            serverName = serverName.Split("/".ToCharArray())[(int)EnumMgr.PathLevel.Connection];
            var rtnMongoConnectionConfig = new MongoConnectionConfig();

            if (MongoConnectionConfigList.ContainsKey(serverName))
            {
                rtnMongoConnectionConfig = MongoConnectionConfigList[serverName];
            }
            return(rtnMongoConnectionConfig);
        }
コード例 #5
0
ファイル: MongoHelper.cs プロジェクト: magicdict/MongoCola
        /// <summary>
        ///     使用字符串连接来填充
        /// </summary>
        /// <remarks>http://www.mongodb.org/display/DOCS/Connections</remarks>
        /// <param name="config"></param>
        public static string FillConfigWithConnectionString(ref MongoConnectionConfig config)
        {
            var connectionString = config.ConnectionString;
            //mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
            try
            {
                var mongourl = MongoUrl.Create(connectionString);
                config.DataBaseName = mongourl.DatabaseName;
                if (mongourl.Username != null)
                {
                    config.UserName = mongourl.Username;
                    config.Password = mongourl.Password;
                    //config.LoginAsAdmin = mongourl.Admin;
                }
                config.Host = mongourl.Server.Host;
                config.Port = mongourl.Server.Port;

                if (mongourl.ReadPreference != null) config.ReadPreference = mongourl.ReadPreference.ToString();
                config.WriteConcern = mongourl.GetWriteConcern(true).ToString();
                config.WaitQueueSize = mongourl.WaitQueueSize;
                config.WtimeoutMs = (int)mongourl.WaitQueueTimeout.TotalMilliseconds;
                config.IsUseDefaultSetting = false;

                config.SocketTimeoutMs = (int)mongourl.SocketTimeout.TotalMilliseconds;
                config.ConnectTimeoutMs = (int)mongourl.ConnectTimeout.TotalMilliseconds;
                config.ReplSetName = mongourl.ReplicaSetName;
                config.ReplsetList = new List<string>();
                if (!string.IsNullOrEmpty(config.ReplSetName))
                {
                    foreach (var item in mongourl.Servers)
                    {
                        config.ReplsetList.Add(item.Host + (item.Port == 0 ? string.Empty : ":" + item.Port));
                    }
                }
                return string.Empty;
            }
            catch (FormatException ex)
            {
                return ex.ToString();
            }
            catch (Exception ex)
            {
                return ex.ToString();
            }
        }
コード例 #6
0
ファイル: TagInfo.cs プロジェクト: magicdict/MongoCola
        /// <summary>
        ///     CreateTagInfo
        /// </summary>
        /// <param name="connectionName"></param>
        public static TagInfo CreateTagInfo(MongoConnectionConfig config)
        {
            var tagString = ConstMgr.ConnectionTag + ":" + config.ConnectionName;
            switch (config.ServerRole)
            {
                case MongoConnectionConfig.SvrRoleType.ReplsetSvr:
                    tagString = ConstMgr.ConnectionReplsetTag + ":" + config.ConnectionName;
                    break;
                case MongoConnectionConfig.SvrRoleType.ShardSvr:
                    tagString = ConstMgr.ConnectionClusterTag + ":" + config.ConnectionName;
                    break;
                default:
                    tagString = ConstMgr.ConnectionTag + ":" + config.ConnectionName;
                    break;
            }

            return GetMongoObj(tagString);
        }
コード例 #7
0
 /// <summary>
 ///     初始化(修改)
 /// </summary>
 /// <param name="connectionName"></param>
 public FrmConnectionMgr(string connectionName)
 {
     InitializeComponent();
     foreach (var item in Enum.GetValues(typeof(EnumMgr.StorageEngineType)))
     {
         cmbStorageEngine.Items.Add(item);
         cmbStorageEngine.SelectedIndex = 0;
     }
     OldConnectionName = connectionName;
     //Modify Mode
     ModifyConn = MongoConnectionConfig.MongoConfig.ConnectionList[connectionName];
     UIBinding.TryUpdateForm(ModifyConn, this.Controls);
     foreach (var item in ModifyConn.ReplsetList)
     {
         lstHost.Items.Add(item);
     }
     cmbStorageEngine.SelectedIndex = ModifyConn.StorageEngine == EnumMgr.StorageEngineType.MmaPv1 ? 0 : 1;
     cmdAdd.Text = GuiConfig.IsUseDefaultLanguage ? "Modify" : GuiConfig.GetText(TextType.CommonModify);
 }
コード例 #8
0
        /// <summary>
        ///     CreateTagInfo
        /// </summary>
        /// <param name="config"></param>
        public static TagInfo CreateTagInfo(MongoConnectionConfig config)
        {
            var tagString = ConstMgr.ConnectionTag + ":" + config.ConnectionName;

            switch (config.ServerRole)
            {
            case MongoConnectionConfig.SvrRoleType.ReplsetSvr:
                tagString = ConstMgr.ConnectionReplsetTag + ":" + config.ConnectionName;
                break;

            case MongoConnectionConfig.SvrRoleType.ShardSvr:
                tagString = ConstMgr.ConnectionClusterTag + ":" + config.ConnectionName;
                break;

            default:
                tagString = ConstMgr.ConnectionTag + ":" + config.ConnectionName;
                break;
            }

            return(GetMongoObj(tagString));
        }
コード例 #9
0
 /// <summary>
 ///     初始化(修改)
 /// </summary>
 /// <param name="connectionName"></param>
 public FrmConnectionMgr(string connectionName)
 {
     InitializeComponent();
     foreach (var item in Enum.GetValues(typeof(EnumMgr.StorageEngineType)))
     {
         cmbStorageEngine.Items.Add(item);
         cmbStorageEngine.SelectedIndex = 0;
     }
     OldConnectionName = connectionName;
     //Modify Mode
     ModifyConn = MongoConnectionConfig.MongoConfig.ConnectionList[connectionName];
     UiBinding.TryUpdateForm(ModifyConn, Controls);
     if (ModifyConn.AuthMechanism == ConstMgr.MONGODB_CR) radMONGODB_CR.Checked = true;
     if (ModifyConn.AuthMechanism == ConstMgr.MONGODB_X509) radMONGODB_X509.Checked = true;
     if (ModifyConn.AuthMechanism == ConstMgr.SCRAM_SHA_1) radSCRAM_SHA_1.Checked = true;
     foreach (var item in ModifyConn.ReplsetList)
     {
         lstHost.Items.Add(item);
     }
     cmbStorageEngine.SelectedIndex = ModifyConn.StorageEngine == EnumMgr.StorageEngineType.MmaPv1 ? 0 : 1;
     cmdAdd.Text = GuiConfig.IsUseDefaultLanguage ? "Modify" : GuiConfig.GetText("Common.Modify");
 }
コード例 #10
0
ファイル: MongoConfig.cs プロジェクト: jango2015/MongoCola
 /// <summary>
 ///     添加链接
 /// </summary>
 /// <param name="con"></param>
 /// <returns></returns>
 public static void AddConnection(MongoConnectionConfig con)
 {
     MongoConnectionConfig.MongoConfig.ConnectionList.Add(con.ConnectionName, con);
 }
コード例 #11
0
ファイル: UIHelper.cs プロジェクト: magicdict/MongoCola
        /// <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;
        }
コード例 #12
0
        /// <summary>
        ///     Set ReadPreference And WriteConcern
        /// </summary>
        /// <param name="clientsettings"></param>
        /// <param name="config"></param>
        public static void SetReadPreferenceWriteConcern(MongoClientSettings clientsettings, MongoConnectionConfig config)
        {
            //Default ReadPreference is Primary
            if (config.ReadPreference == "Primary")
            {
                clientsettings.ReadPreference = ReadPreference.Primary;
            }
            if (config.ReadPreference == "PrimaryPreferred")
            {
                clientsettings.ReadPreference = ReadPreference.PrimaryPreferred;
            }
            if (config.ReadPreference == "Secondary")
            {
                clientsettings.ReadPreference = ReadPreference.Secondary;
            }
            if (config.ReadPreference == "SecondaryPreferred")
            {
                clientsettings.ReadPreference = ReadPreference.SecondaryPreferred;
            }
            if (config.ReadPreference == "Nearest")
            {
                clientsettings.ReadPreference = ReadPreference.Nearest;
            }


            //Default ReadConcern is Local
            if (config.ReadConcern == "Local")
            {
                clientsettings.ReadConcern = ReadConcern.Local;
            }
            if (config.ReadConcern == "Majority")
            {
                clientsettings.ReadConcern = ReadConcern.Majority;
            }
            if (config.ReadConcern == "Linearizable")
            {
                clientsettings.ReadConcern = ReadConcern.Linearizable;
            }


            //Default WriteConcern is Unacknowledged
            if (config.WriteConcern == "Unacknowledged")
            {
                clientsettings.WriteConcern = WriteConcern.Unacknowledged;
            }
            if (config.WriteConcern == "Acknowledged")
            {
                clientsettings.WriteConcern = WriteConcern.Acknowledged;
            }
            if (config.WriteConcern == "W1")
            {
                clientsettings.WriteConcern = WriteConcern.W1;
            }
            if (config.WriteConcern == "W2")
            {
                clientsettings.WriteConcern = WriteConcern.W2;
            }
            if (config.WriteConcern == "W3")
            {
                clientsettings.WriteConcern = WriteConcern.W3;
            }
            if (config.WriteConcern == "WMajority")
            {
                clientsettings.WriteConcern = WriteConcern.WMajority;
            }
        }
コード例 #13
0
ファイル: UIHelper.cs プロジェクト: lizhi5753186/MongoCola
 /// <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;
 }
コード例 #14
0
ファイル: MongoConfig.cs プロジェクト: zeroyou/mongoDB_Master
 /// <summary>
 ///     添加链接
 /// </summary>
 /// <param name="con"></param>
 /// <returns></returns>
 public static void AddConnection(MongoConnectionConfig con)
 {
     MongoConnectionConfig.MongoConfig.ConnectionList.Add(con.ConnectionName, con);
 }
コード例 #15
0
        /// <summary>
        ///     根据config获得MongoClientSettings,同时更新一些运行时变量
        /// </summary>
        /// <param name="config"></param>
        /// <returns></returns>
        public static MongoClientSettings CreateMongoClientSettingsByConfig(ref MongoConnectionConfig config)
        {
            //修改获得数据实例的方法
            var mongoClientSetting = new MongoClientSettings();

            if (string.IsNullOrEmpty(config.ConnectionString))
            {
                mongoClientSetting.ConnectionMode = ConnectionMode.Direct;
                SetReadPreferenceWriteConcern(mongoClientSetting, config);
                //Replset时候可以不用设置吗?
                mongoClientSetting.Server = new MongoServerAddress(config.Host, config.Port);
                //MapReduce的时候将消耗大量时间。不过这里需要平衡一下,太长容易造成并发问题
                //The default value for SocketTimeout has been changed from 30 seconds to 0,
                if (config.SocketTimeoutMs != 0)
                {
                    mongoClientSetting.SocketTimeout = new TimeSpan(0, 0, (int)(config.SocketTimeoutMs / 1000));
                }
                if (config.ConnectTimeoutMs != 0)
                {
                    mongoClientSetting.ConnectTimeout = new TimeSpan(0, 0, (int)(config.ConnectTimeoutMs / 1000));
                }
                //                if (SystemConfig.configHelperInstance.wtimeoutMS != 0)
                //                {
                //                    mongoClientSetting.WaitQueueTimeout = new TimeSpan(0, 0, (int)(SystemConfig.configHelperInstance.wtimeoutMS / 1000));
                //                }
                //                if (SystemConfig.configHelperInstance.WaitQueueSize != 0)
                //                {
                //                    mongoClientSetting.WaitQueueSize = SystemConfig.configHelperInstance.WaitQueueSize;
                //                }
                //运行时LoginAsAdmin的设定
                config.LoginAsAdmin = (config.DataBaseName == string.Empty);
                if (!(string.IsNullOrEmpty(config.UserName) || string.IsNullOrEmpty(config.Password)))
                {
                    //认证的设定:注意,这里的密码是明文
                    if (string.IsNullOrEmpty(config.DataBaseName))
                    {
                        mongoClientSetting.Credentials = new[]
                        {
                            MongoCredential.CreateMongoCRCredential(ConstMgr.DatabaseNameAdmin, config.UserName,
                                                                    config.Password)
                        };
                    }
                    else
                    {
                        mongoClientSetting.Credentials = new[]
                        {
                            MongoCredential.CreateMongoCRCredential(config.DataBaseName, config.UserName,
                                                                    config.Password)
                        };
                    }
                }
                if (!string.IsNullOrEmpty(config.ReplSetName))
                {
                    mongoClientSetting.ReplicaSetName = config.ReplSetName;
                    config.ServerRole = MongoConnectionConfig.SvrRoleType.ReplsetSvr;
                }
                else
                {
                    config.ServerRole = MongoConnectionConfig.SvrRoleType.DataSvr;
                }
                if (config.ServerRole == MongoConnectionConfig.SvrRoleType.ReplsetSvr)
                {
                    //ReplsetName不是固有属性,可以设置,不过必须保持与配置文件的一致
                    mongoClientSetting.ConnectionMode = ConnectionMode.ReplicaSet;
                    //添加Replset服务器,注意,这里可能需要事先初始化副本
                    var replsetSvrList = new List <MongoServerAddress>();
                    foreach (var item in config.ReplsetList)
                    {
                        //如果这里的服务器在启动的时候没有--Replset参数,将会出错,当然作为单体的服务器,启动是没有任何问题的
                        MongoServerAddress replSrv;
                        if (item.Split(":".ToCharArray()).Length == 2)
                        {
                            replSrv = new MongoServerAddress(
                                item.Split(":".ToCharArray())[0],
                                Convert.ToInt16(item.Split(":".ToCharArray())[1]));
                        }
                        else
                        {
                            replSrv = new MongoServerAddress(item);
                        }
                        replsetSvrList.Add(replSrv);
                    }
                    mongoClientSetting.Servers = replsetSvrList;
                }
            }
            else
            {
                //使用MongoConnectionString建立连接
                mongoClientSetting = MongoClientSettings.FromUrl(MongoUrl.Create(config.ConnectionString));
            }
            //为了避免出现无法读取数据库结构的问题,将读权限都设置为Preferred
            if (mongoClientSetting.ReadPreference == ReadPreference.Primary)
            {
                mongoClientSetting.ReadPreference = ReadPreference.PrimaryPreferred;
            }
            if (mongoClientSetting.ReadPreference == ReadPreference.Secondary)
            {
                mongoClientSetting.ReadPreference = ReadPreference.SecondaryPreferred;
            }
            return(mongoClientSetting);
        }
コード例 #16
0
ファイル: ConfigHelper.cs プロジェクト: jango2015/MongoCola
		/// <summary>
		///     添加链接
		/// </summary>
		/// <param name="con"></param>
		/// <returns></returns>
		public static Boolean AddConnection(MongoConnectionConfig con)
		{
			SystemManager.config.ConnectionList.Add(con.ConnectionName, con);
			return true;
		}
コード例 #17
0
 /// <summary>
 ///     获得当前服务器配置
 /// </summary>
 /// <returns></returns>
 public static MongoConnectionConfig GetCurrentServerConfig()
 {
     var serverName = SelectObjectTag.Split(":".ToCharArray())[1];
     serverName = serverName.Split("/".ToCharArray())[(int) EnumMgr.PathLevel.Connection];
     var rtnMongoConnectionConfig = new MongoConnectionConfig();
     if (MongoConnectionConfigList.ContainsKey(serverName))
     {
         rtnMongoConnectionConfig = MongoConnectionConfigList[serverName];
     }
     return rtnMongoConnectionConfig;
 }
コード例 #18
0
 /// <summary>
 ///     CreateMongoServer
 /// </summary>
 /// <param name="config"></param>
 /// <returns></returns>
 public static MongoServer CreateMongoServer(ref MongoConnectionConfig config)
 {
     var masterMongoClient = new MongoClient(CreateMongoClientSettingsByConfig(ref config));
     return masterMongoClient.GetServer();
 }
コード例 #19
0
 /// <summary>
 ///     根据config获得MongoClientSettings,同时更新一些运行时变量
 /// </summary>
 /// <param name="config"></param>
 /// <returns></returns>
 public static MongoClientSettings CreateMongoClientSettingsByConfig(ref MongoConnectionConfig config)
 {
     //修改获得数据实例的方法
     var mongoClientSetting = new MongoClientSettings();
     if (string.IsNullOrEmpty(config.ConnectionString))
     {
         mongoClientSetting.ConnectionMode = ConnectionMode.Direct;
         SetReadPreferenceWriteConcern(mongoClientSetting, config);
         //Replset时候可以不用设置吗?
         mongoClientSetting.Server = new MongoServerAddress(config.Host, config.Port);
         //MapReduce的时候将消耗大量时间。不过这里需要平衡一下,太长容易造成并发问题
         //The default value for SocketTimeout has been changed from 30 seconds to 0,
         if (config.SocketTimeoutMs != 0)
         {
             mongoClientSetting.SocketTimeout = new TimeSpan(0, 0, (int) (config.SocketTimeoutMs/1000));
         }
         if (config.ConnectTimeoutMs != 0)
         {
             mongoClientSetting.ConnectTimeout = new TimeSpan(0, 0, (int) (config.ConnectTimeoutMs/1000));
         }
         //                if (SystemConfig.configHelperInstance.wtimeoutMS != 0)
         //                {
         //                    mongoClientSetting.WaitQueueTimeout = new TimeSpan(0, 0, (int)(SystemConfig.configHelperInstance.wtimeoutMS / 1000));
         //                }
         //                if (SystemConfig.configHelperInstance.WaitQueueSize != 0)
         //                {
         //                    mongoClientSetting.WaitQueueSize = SystemConfig.configHelperInstance.WaitQueueSize;
         //                }
         //运行时LoginAsAdmin的设定
         config.LoginAsAdmin = (config.DataBaseName == string.Empty);
         if (!(string.IsNullOrEmpty(config.UserName) || string.IsNullOrEmpty(config.Password)))
         {
             //认证的设定:注意,这里的密码是明文
             if (string.IsNullOrEmpty(config.DataBaseName))
             {
                 mongoClientSetting.Credentials = new[]
                 {
                     MongoCredential.CreateMongoCRCredential(ConstMgr.DatabaseNameAdmin, config.UserName,
                         config.Password)
                 };
             }
             else
             {
                 mongoClientSetting.Credentials = new[]
                 {
                     MongoCredential.CreateMongoCRCredential(config.DataBaseName, config.UserName,
                         config.Password)
                 };
             }
         }
         if (!string.IsNullOrEmpty(config.ReplSetName))
         {
             mongoClientSetting.ReplicaSetName = config.ReplSetName;
             config.ServerRole = MongoConnectionConfig.SvrRoleType.ReplsetSvr;
         }
         else
         {
             config.ServerRole = MongoConnectionConfig.SvrRoleType.DataSvr;
         }
         if (config.ServerRole == MongoConnectionConfig.SvrRoleType.ReplsetSvr)
         {
             //ReplsetName不是固有属性,可以设置,不过必须保持与配置文件的一致
             mongoClientSetting.ConnectionMode = ConnectionMode.ReplicaSet;
             //添加Replset服务器,注意,这里可能需要事先初始化副本
             var replsetSvrList = new List<MongoServerAddress>();
             foreach (var item in config.ReplsetList)
             {
                 //如果这里的服务器在启动的时候没有--Replset参数,将会出错,当然作为单体的服务器,启动是没有任何问题的
                 MongoServerAddress replSrv;
                 if (item.Split(":".ToCharArray()).Length == 2)
                 {
                     replSrv = new MongoServerAddress(
                         item.Split(":".ToCharArray())[0],
                         Convert.ToInt16(item.Split(":".ToCharArray())[1]));
                 }
                 else
                 {
                     replSrv = new MongoServerAddress(item);
                 }
                 replsetSvrList.Add(replSrv);
             }
             mongoClientSetting.Servers = replsetSvrList;
         }
     }
     else
     {
         //使用MongoConnectionString建立连接
         mongoClientSetting = MongoClientSettings.FromUrl(MongoUrl.Create(config.ConnectionString));
     }
     //为了避免出现无法读取数据库结构的问题,将读权限都设置为Preferred
     if (mongoClientSetting.ReadPreference == ReadPreference.Primary)
     {
         mongoClientSetting.ReadPreference = ReadPreference.PrimaryPreferred;
     }
     if (mongoClientSetting.ReadPreference == ReadPreference.Secondary)
     {
         mongoClientSetting.ReadPreference = ReadPreference.SecondaryPreferred;
     }
     return mongoClientSetting;
 }
コード例 #20
0
        /// <summary>
        ///     CreateMongoClient
        /// </summary>
        /// <param name="config"></param>
        /// <returns></returns>
        public static MongoClient CreateMongoClient(ref MongoConnectionConfig config)
        {
            var masterMongoClient = new MongoClient(CreateMongoClientSettingsByConfig(ref config));

            return(masterMongoClient);
        }
コード例 #21
0
ファイル: frmConnect.cs プロジェクト: magicdict/MongoCola
 /// <summary>
 /// 
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void cmdFromUriString_Click(object sender, EventArgs e)
 {
     var uri = MyMessageBox.ShowInput("MongoConnectionUri", "Uri");
     MongoConnectionConfig ModifyConn = new MongoConnectionConfig();
     ModifyConn.ConnectionString = uri;
     var strException = MongoHelper.FillConfigWithConnectionString(ref ModifyConn);
     if (strException != string.Empty)
     {
         MyMessageBox.ShowMessage("Url Exception", "Url Formation,please check it", strException);
         return;
     }
     //这里不能使用 :,会出现问题
     var ConnectionName = ModifyConn.Host + "_" + ModifyConn.Port;
     ModifyConn.ConnectionName = ConnectionName;
     MongoConnectionConfig.MongoConfig.ConnectionList.Add(ConnectionName, ModifyConn);
     RefreshConnection();
 }
コード例 #22
0
 /// <summary>
 ///     根据服务器名称获取配置
 /// </summary>
 /// <param name="mongoSvrKey"></param>
 /// <returns></returns>
 public static MongoConnectionConfig GetServerConfigBySvrPath(string mongoSvrKey)
 {
     var rtnMongoConnectionConfig = new MongoConnectionConfig();
     if (MongoConnectionConfigList.ContainsKey(mongoSvrKey))
     {
         rtnMongoConnectionConfig = MongoConnectionConfigList[mongoSvrKey];
     }
     return rtnMongoConnectionConfig;
 }
コード例 #23
0
ファイル: ReadWrite.cs プロジェクト: magicdict/MongoCola
        /// <summary>
        ///     Set ReadPreference And WriteConcern
        /// </summary>
        /// <param name="clientsettings"></param>
        /// <param name="config"></param>
        public static void SetReadPreferenceWriteConcern(MongoClientSettings clientsettings, MongoConnectionConfig config)
        {
            //Default ReadPreference is Primary
            if (config.ReadPreference == "Primary")
            {
                clientsettings.ReadPreference = ReadPreference.Primary;
            }
            if (config.ReadPreference == "PrimaryPreferred")
            {
                clientsettings.ReadPreference = ReadPreference.PrimaryPreferred;
            }
            if (config.ReadPreference == "Secondary")
            {
                clientsettings.ReadPreference = ReadPreference.Secondary;
            }
            if (config.ReadPreference == "SecondaryPreferred")
            {
                clientsettings.ReadPreference = ReadPreference.SecondaryPreferred;
            }
            if (config.ReadPreference == "Nearest")
            {
                clientsettings.ReadPreference = ReadPreference.Nearest;
            }

            //Default ReadConcern is Local
            if (config.ReadConcern == "Local")
            {
                clientsettings.ReadConcern = ReadConcern.Local;
            }
            if (config.ReadConcern == "Majority")
            {
                clientsettings.ReadConcern = ReadConcern.Majority;
            }
            if (config.ReadConcern == "Linearizable")
            {
                clientsettings.ReadConcern = ReadConcern.Linearizable;
            }

            //Default WriteConcern is Unacknowledged
            if (config.WriteConcern == "Unacknowledged")
            {
                clientsettings.WriteConcern = WriteConcern.Unacknowledged;
            }
            if (config.WriteConcern == "Acknowledged")
            {
                clientsettings.WriteConcern = WriteConcern.Acknowledged;
            }
            if (config.WriteConcern == "W1")
            {
                clientsettings.WriteConcern = WriteConcern.W1;
            }
            if (config.WriteConcern == "W2")
            {
                clientsettings.WriteConcern = WriteConcern.W2;
            }
            if (config.WriteConcern == "W3")
            {
                clientsettings.WriteConcern = WriteConcern.W3;
            }
            if (config.WriteConcern == "WMajority")
            {
                clientsettings.WriteConcern = WriteConcern.WMajority;
            }
        }
コード例 #24
0
ファイル: frmReplsetMgr.cs プロジェクト: jango2015/MongoCola
 /// <summary>
 /// </summary>
 /// <param name="config"></param>
 public FrmReplsetMgr(ref MongoConnectionConfig config)
 {
     InitializeComponent();
     RuntimeMongoDbContext.CurrentMongoConnectionconfig = config;
 }
コード例 #25
0
 /// <summary>
 ///     Set ReadPreference And WriteConcern
 /// </summary>
 /// <param name="clientsettings"></param>
 /// <param name="config"></param>
 private static void SetReadPreferenceWriteConcern(MongoClientSettings clientsettings,
     MongoConnectionConfig config)
 {
     if (config.ReadPreference == ReadPreference.Primary.ToString())
     {
         clientsettings.ReadPreference = ReadPreference.Primary;
     }
     if (config.ReadPreference == ReadPreference.PrimaryPreferred.ToString())
     {
         clientsettings.ReadPreference = ReadPreference.PrimaryPreferred;
     }
     if (config.ReadPreference == ReadPreference.Secondary.ToString())
     {
         clientsettings.ReadPreference = ReadPreference.Secondary;
     }
     if (config.ReadPreference == ReadPreference.SecondaryPreferred.ToString())
     {
         clientsettings.ReadPreference = ReadPreference.SecondaryPreferred;
     }
     if (config.ReadPreference == ReadPreference.Nearest.ToString())
     {
         clientsettings.ReadPreference = ReadPreference.Nearest;
     }
     //Default ReadPreference is Primary
     //安全模式
     if (config.WriteConcern == WriteConcern.Unacknowledged.ToString())
     {
         clientsettings.WriteConcern = WriteConcern.Unacknowledged;
     }
     if (config.WriteConcern == WriteConcern.Acknowledged.ToString())
     {
         clientsettings.WriteConcern = WriteConcern.Acknowledged;
     }
     if (config.WriteConcern == WriteConcern.W2.ToString())
     {
         clientsettings.WriteConcern = WriteConcern.W2;
     }
     if (config.WriteConcern == WriteConcern.W3.ToString())
     {
         clientsettings.WriteConcern = WriteConcern.W3;
     }
     //remove from mongodrvier 2.0.0
     //if (config.WriteConcern == WriteConcern.W4.ToString())
     //{
     //    mongoSvrSetting.WriteConcern = WriteConcern.W4;
     //}
     if (config.WriteConcern == WriteConcern.WMajority.ToString())
     {
         clientsettings.WriteConcern = WriteConcern.WMajority;
     }
     //Default WriteConcern is w=0
 }