/// <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)); }
/// <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); }
/// <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 }
/// <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); }
/// <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(); } }
/// <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); }
/// <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); }
/// <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)); }
/// <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"); }
/// <summary> /// 添加链接 /// </summary> /// <param name="con"></param> /// <returns></returns> public static void AddConnection(MongoConnectionConfig con) { MongoConnectionConfig.MongoConfig.ConnectionList.Add(con.ConnectionName, con); }
/// <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; }
/// <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; } }
/// <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; }
/// <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); }
/// <summary> /// 添加链接 /// </summary> /// <param name="con"></param> /// <returns></returns> public static Boolean AddConnection(MongoConnectionConfig con) { SystemManager.config.ConnectionList.Add(con.ConnectionName, con); return true; }
/// <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; }
/// <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(); }
/// <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; }
/// <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); }
/// <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(); }
/// <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; }
/// <summary> /// </summary> /// <param name="config"></param> public FrmReplsetMgr(ref MongoConnectionConfig config) { InitializeComponent(); RuntimeMongoDbContext.CurrentMongoConnectionconfig = config; }