// constructors /// <summary> /// Creates a new instance of MongoUrlBuilder. /// </summary> public MongoUrlBuilder() { _connectionMode = ConnectionMode.Automatic; _connectTimeout = MongoDefaults.ConnectTimeout; _databaseName = null; _defaultCredentials = null; _fsync = null; _guidRepresentation = MongoDefaults.GuidRepresentation; _ipv6 = false; _journal = null; _maxConnectionIdleTime = MongoDefaults.MaxConnectionIdleTime; _maxConnectionLifeTime = MongoDefaults.MaxConnectionLifeTime; _maxConnectionPoolSize = MongoDefaults.MaxConnectionPoolSize; _minConnectionPoolSize = MongoDefaults.MinConnectionPoolSize; _readPreference = null; _replicaSetName = null; _secondaryAcceptableLatency = MongoDefaults.SecondaryAcceptableLatency; _servers = null; _slaveOk = null; _socketTimeout = MongoDefaults.SocketTimeout; _useSsl = false; _verifySslCertificate = true; _w = null; _waitQueueMultiple = MongoDefaults.WaitQueueMultiple; _waitQueueSize = MongoDefaults.WaitQueueSize; _waitQueueTimeout = MongoDefaults.WaitQueueTimeout; _wTimeout = null; }
private void ParseOption(string name, string value) { switch (name.ToLower()) { case "authmechanism": _authMechanism = value; break; case "authmechanismproperties": foreach (var property in GetAuthMechanismProperties(name, value)) { _authMechanismProperties.Add(property.Key, property.Value); } break; case "authsource": _authSource = value; break; case "connect": _connect = ParseClusterConnectionMode(name, value); break; case "connecttimeout": case "connecttimeoutms": _connectTimeout = ParseTimeSpan(name, value); break; case "fsync": _fsync = ParseBoolean(name, value); break; case "gssapiservicename": _authMechanismProperties.Add("SERVICE_NAME", value); break; case "ipv6": _ipv6 = ParseBoolean(name, value); break; case "j": case "journal": _journal = ParseBoolean(name, value); break; case "maxidletime": case "maxidletimems": _maxIdleTime = ParseTimeSpan(name, value); break; case "maxlifetime": case "maxlifetimems": _maxLifeTime = ParseTimeSpan(name, value); break; case "maxpoolsize": _maxPoolSize = ParseInt32(name, value); break; case "minpoolsize": _minPoolSize = ParseInt32(name, value); break; case "readconcernlevel": _readConcernLevel = ParseEnum <ReadConcernLevel>(name, value); break; case "readpreference": _readPreference = ParseEnum <ReadPreferenceMode>(name, value); break; case "readpreferencetags": var tagSet = ParseReadPreferenceTagSets(name, value); if (_readPreferenceTags == null) { _readPreferenceTags = new List <TagSet> { tagSet }.AsReadOnly(); } else { _readPreferenceTags = _readPreferenceTags.Concat(new[] { tagSet }).ToList(); } break; case "replicaset": _replicaSet = value; break; case "safe": var safe = ParseBoolean(name, value); if (_w == null) { _w = safe ? 1 : 0; } else { if (safe) { // don't overwrite existing W value unless it's 0 var wCount = _w as WriteConcern.WCount; if (wCount != null && wCount.Value == 0) { _w = 1; } } else { _w = 0; } } break; case "localthreshold": case "localthresholdms": case "secondaryacceptablelatency": case "secondaryacceptablelatencyms": _localThreshold = ParseTimeSpan(name, value); break; case "slaveok": if (_readPreference != null) { throw new MongoConfigurationException("ReadPreference has already been configured."); } _readPreference = ParseBoolean(name, value) ? ReadPreferenceMode.SecondaryPreferred : ReadPreferenceMode.Primary; break; case "serverselectiontimeout": case "serverselectiontimeoutms": _serverSelectionTimeout = ParseTimeSpan(name, value); break; case "sockettimeout": case "sockettimeoutms": _socketTimeout = ParseTimeSpan(name, value); break; case "ssl": _ssl = ParseBoolean(name, value); break; case "sslverifycertificate": _sslVerifyCertificate = ParseBoolean(name, value); break; case "guids": case "uuidrepresentation": _uuidRepresentation = ParseEnum <GuidRepresentation>(name, value); break; case "w": _w = WriteConcern.WValue.Parse(value); break; case "wtimeout": case "wtimeoutms": _wTimeout = ParseTimeSpan(name, value); if (_wTimeout < TimeSpan.Zero) { throw new MongoConfigurationException($"{name} must be greater than or equal to 0."); } break; case "waitqueuemultiple": _waitQueueMultiple = ParseDouble(name, value); break; case "waitqueuesize": _waitQueueSize = ParseInt32(name, value); break; case "waitqueuetimeout": case "waitqueuetimeoutms": _waitQueueTimeout = ParseTimeSpan(name, value); break; default: _unknownOptions.Add(name, value); break; } }
private void ParseOption(string name, string value) { switch (name.ToLowerInvariant()) { case "appname": string invalidApplicationNameMessage; if (!ApplicationNameHelper.IsApplicationNameValid(value, out invalidApplicationNameMessage)) { throw new MongoConfigurationException(invalidApplicationNameMessage); } _applicationName = value; break; case "authmechanism": _authMechanism = value; break; case "authmechanismproperties": foreach (var property in GetAuthMechanismProperties(name, value)) { _authMechanismProperties.Add(property.Key, property.Value); } break; case "authsource": _authSource = value; break; case "compressors": _compressorsOptions.SaveCompressors(value.Split(',')); break; case "connect": _connect = ParseClusterConnectionMode(name, value); break; case "connecttimeout": case "connecttimeoutms": _connectTimeout = ParseTimeSpan(name, value); break; case "fsync": _fsync = ParseBoolean(name, value); break; case "gssapiservicename": _authMechanismProperties.Add("SERVICE_NAME", value); break; case "heartbeatfrequency": case "heartbeatfrequencyms": case "heartbeatinterval": case "heartbeatintervalms": _heartbeatInterval = ParseTimeSpan(name, value); break; case "heartbeattimeout": case "heartbeattimeoutms": _heartbeatTimeout = ParseTimeSpan(name, value); break; case "ipv6": _ipv6 = ParseBoolean(name, value); break; case "j": case "journal": _journal = ParseBoolean(name, value); break; case "maxidletime": case "maxidletimems": _maxIdleTime = ParseTimeSpan(name, value); break; case "maxlifetime": case "maxlifetimems": _maxLifeTime = ParseTimeSpan(name, value); break; case "maxpoolsize": _maxPoolSize = ParseInt32(name, value); break; case "maxstaleness": case "maxstalenessseconds": _maxStaleness = ParseTimeSpan(name, value); if (_maxStaleness.Value == TimeSpan.FromSeconds(-1)) { _maxStaleness = null; } break; case "minpoolsize": _minPoolSize = ParseInt32(name, value); break; case "readconcernlevel": _readConcernLevel = ParseEnum <ReadConcernLevel>(name, value); break; case "readpreference": _readPreference = ParseEnum <ReadPreferenceMode>(name, value); break; case "readpreferencetags": var tagSet = ParseReadPreferenceTagSets(name, value); if (_readPreferenceTags == null) { _readPreferenceTags = new List <TagSet> { tagSet }.AsReadOnly(); } else { _readPreferenceTags = _readPreferenceTags.Concat(new[] { tagSet }).ToList(); } break; case "replicaset": _replicaSet = value; break; case "retryreads": _retryReads = ParseBoolean(name, value); break; case "retrywrites": _retryWrites = ParseBoolean(name, value); break; case "safe": var safe = ParseBoolean(name, value); if (_w == null) { _w = safe ? 1 : 0; } else { if (safe) { // don't overwrite existing W value unless it's 0 var wCount = _w as WriteConcern.WCount; if (wCount != null && wCount.Value == 0) { _w = 1; } } else { _w = 0; } } break; case "localthreshold": case "localthresholdms": case "secondaryacceptablelatency": case "secondaryacceptablelatencyms": _localThreshold = ParseTimeSpan(name, value); break; case "slaveok": if (_readPreference != null) { throw new MongoConfigurationException("ReadPreference has already been configured."); } _readPreference = ParseBoolean(name, value) ? ReadPreferenceMode.SecondaryPreferred : ReadPreferenceMode.Primary; break; case "serverselectiontimeout": case "serverselectiontimeoutms": _serverSelectionTimeout = ParseTimeSpan(name, value); break; case "sockettimeout": case "sockettimeoutms": _socketTimeout = ParseTimeSpan(name, value); break; case "ssl": // Obsolete case "tls": var tlsValue = ParseBoolean(name, value); if (_tls.HasValue && _tls.Value != tlsValue) { throw new MongoConfigurationException("tls has already been configured with a different value."); } _tls = tlsValue; break; case "sslverifycertificate": // Obsolete var sslVerifyCertificateValue = ParseBoolean(name, value); _tlsInsecure = EnsureTlsInsecureIsValid(!sslVerifyCertificateValue); break; case "tlsinsecure": var tlsInsecureValue = ParseBoolean(name, value); _tlsInsecure = EnsureTlsInsecureIsValid(tlsInsecureValue); break; case "guids": case "uuidrepresentation": _uuidRepresentation = ParseEnum <GuidRepresentation>(name, value); break; case "w": _w = WriteConcern.WValue.Parse(value); break; case "wtimeout": case "wtimeoutms": _wTimeout = ParseTimeSpan(name, value); if (_wTimeout < TimeSpan.Zero) { throw new MongoConfigurationException($"{name} must be greater than or equal to 0."); } break; case "waitqueuemultiple": _waitQueueMultiple = ParseDouble(name, value); break; case "waitqueuesize": _waitQueueSize = ParseInt32(name, value); break; case "waitqueuetimeout": case "waitqueuetimeoutms": _waitQueueTimeout = ParseTimeSpan(name, value); break; case "zlibcompressionlevel": _compressorsOptions.SaveCompressionOption("Level", ParseInt32(name, value), CompressorType.Zlib); break; default: _unknownOptions.Add(name, value); break; } }
// constructors /// <summary> /// Creates a new instance of MongoUrlBuilder. /// </summary> public MongoUrlBuilder() { _authenticationMechanism = MongoDefaults.AuthenticationMechanism; _authenticationMechanismProperties = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); _authenticationSource = null; _connectionMode = ConnectionMode.Automatic; _connectTimeout = MongoDefaults.ConnectTimeout; _databaseName = null; _fsync = null; _guidRepresentation = MongoDefaults.GuidRepresentation; _ipv6 = false; _journal = null; _maxConnectionIdleTime = MongoDefaults.MaxConnectionIdleTime; _maxConnectionLifeTime = MongoDefaults.MaxConnectionLifeTime; _maxConnectionPoolSize = MongoDefaults.MaxConnectionPoolSize; _minConnectionPoolSize = MongoDefaults.MinConnectionPoolSize; _password = null; _readConcernLevel = null; _readPreference = null; _replicaSetName = null; _localThreshold = MongoDefaults.LocalThreshold; _servers = new[] { new MongoServerAddress("localhost", 27017) }; _serverSelectionTimeout = MongoDefaults.ServerSelectionTimeout; _socketTimeout = MongoDefaults.SocketTimeout; _username = null; _useSsl = false; _verifySslCertificate = true; _w = null; _waitQueueMultiple = MongoDefaults.WaitQueueMultiple; _waitQueueSize = MongoDefaults.WaitQueueSize; _waitQueueTimeout = MongoDefaults.WaitQueueTimeout; _wTimeout = null; }
/// <summary> /// Parses a URL and sets all settings to match the URL. /// </summary> /// <param name="url">The URL.</param> public void Parse(string url) { var connectionString = new ConnectionString(url); _authenticationMechanism = connectionString.AuthMechanism; _authenticationMechanismProperties = connectionString.AuthMechanismProperties.ToDictionary(x => x.Key, x => x.Value, StringComparer.OrdinalIgnoreCase); _authenticationSource = connectionString.AuthSource; switch (connectionString.Connect) { case ClusterConnectionMode.Direct: _connectionMode = Driver.ConnectionMode.Direct; break; case ClusterConnectionMode.ReplicaSet: _connectionMode = Driver.ConnectionMode.ReplicaSet; break; case ClusterConnectionMode.Sharded: _connectionMode = Driver.ConnectionMode.ShardRouter; break; case ClusterConnectionMode.Standalone: _connectionMode = Driver.ConnectionMode.Standalone; break; default: _connectionMode = Driver.ConnectionMode.Automatic; break; } _connectTimeout = connectionString.ConnectTimeout.GetValueOrDefault(MongoDefaults.ConnectTimeout); _databaseName = connectionString.DatabaseName; _fsync = connectionString.FSync; _guidRepresentation = connectionString.UuidRepresentation.GetValueOrDefault(MongoDefaults.GuidRepresentation); _ipv6 = connectionString.Ipv6.GetValueOrDefault(false); _journal = connectionString.Journal; _maxConnectionIdleTime = connectionString.MaxIdleTime.GetValueOrDefault(MongoDefaults.MaxConnectionIdleTime); _maxConnectionLifeTime = connectionString.MaxLifeTime.GetValueOrDefault(MongoDefaults.MaxConnectionLifeTime); _maxConnectionPoolSize = connectionString.MaxPoolSize.GetValueOrDefault(MongoDefaults.MaxConnectionPoolSize); _minConnectionPoolSize = connectionString.MinPoolSize.GetValueOrDefault(MongoDefaults.MinConnectionPoolSize); _password = connectionString.Password; _readConcernLevel = connectionString.ReadConcernLevel; if (connectionString.ReadPreference != null) { _readPreference = new ReadPreference(connectionString.ReadPreference.Value); } if (connectionString.ReadPreferenceTags != null) { if (_readPreference == null) { throw new MongoConfigurationException("ReadPreferenceMode is required when using tag sets."); } _readPreference = _readPreference.With(tagSets: connectionString.ReadPreferenceTags); } _replicaSetName = connectionString.ReplicaSet; _localThreshold = connectionString.LocalThreshold.GetValueOrDefault(MongoDefaults.LocalThreshold); _servers = connectionString.Hosts.Select(endPoint => { DnsEndPoint dnsEndPoint; IPEndPoint ipEndPoint; if ((dnsEndPoint = endPoint as DnsEndPoint) != null) { return new MongoServerAddress(dnsEndPoint.Host, dnsEndPoint.Port); } else if ((ipEndPoint = endPoint as IPEndPoint) != null) { var address = ipEndPoint.Address.ToString(); if (ipEndPoint.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6) { address = "[" + address + "]"; } return new MongoServerAddress(address, ipEndPoint.Port); } else { throw new NotSupportedException("Only DnsEndPoint and IPEndPoints are supported in the connection string."); } }); _serverSelectionTimeout = connectionString.ServerSelectionTimeout.GetValueOrDefault(MongoDefaults.ServerSelectionTimeout); _socketTimeout = connectionString.SocketTimeout.GetValueOrDefault(MongoDefaults.SocketTimeout); _username = connectionString.Username; _useSsl = connectionString.Ssl.GetValueOrDefault(false); _verifySslCertificate = connectionString.SslVerifyCertificate.GetValueOrDefault(true); _w = connectionString.W; if (connectionString.WaitQueueSize != null) { _waitQueueSize = connectionString.WaitQueueSize.Value; _waitQueueMultiple = 0.0; } else if (connectionString.WaitQueueMultiple != null) { _waitQueueMultiple = connectionString.WaitQueueMultiple.Value; _waitQueueSize = 0; } _waitQueueTimeout = connectionString.WaitQueueTimeout.GetValueOrDefault(MongoDefaults.WaitQueueTimeout); _wTimeout = connectionString.WTimeout; }
/// <summary> /// 初始化Provider 提供web.config中sessionState的配置 /// </summary> public override void Initialize(string name, NameValueCollection config) { Debug.WriteLine("Initialize"); if (config == null) { throw new ArgumentNullException("config"); } if (name.Length == 0) { name = "MongoSessionStateStore"; } if (string.IsNullOrEmpty(config["description"])) { config.Remove("description"); config["description"] = "MongoDb Session State Store provider"; } base.Initialize(name, config); _applicationName = System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath; Configuration cfg = WebConfigurationManager.OpenWebConfiguration(_applicationName); _cfgSection = (SessionStateSection)cfg.GetSection("system.web/sessionState"); var applicationName = config["applicationName"]; if (!string.IsNullOrEmpty(applicationName)) { _applicationName = applicationName; } _connectionStringSettings = ConfigurationManager.ConnectionStrings[config["connectionStringName"]]; if (_connectionStringSettings == null || string.IsNullOrWhiteSpace(_connectionStringSettings.ConnectionString)) { throw new ProviderException("Connection string cannot be empty"); } _connectionString = _connectionStringSettings.ConnectionString; _recordExceptions = !string.IsNullOrEmpty(config["recordExceptions"]) && config["recordExceptions"].ToUpper() == "TRUE"; bool journal = false; if (!string.IsNullOrEmpty(config["journal"])) { if (config["journal"].ToUpper() == "TRUE") { journal = true; } } string writeConcerStr = config["writeConcernLevel"]; WriteConcern wc; if (!string.IsNullOrEmpty(writeConcerStr)) { writeConcerStr = writeConcerStr.ToUpper(); switch (writeConcerStr) { case "W1": wc = new WriteConcern(journal: journal, w: 1); break; case "W2": wc = new WriteConcern(journal: journal, w: 2); break; case "W3": wc = new WriteConcern(journal: journal, w: 3); break; case "WMAJORITY": WriteConcern.WValue aux = "majority"; wc = new WriteConcern(aux, journal: journal); break; default: throw new InvalidOperationException("unknown writeConcernLevel"); } _databaseSettings = new MongoDatabaseSettings { WriteConcern = wc }; } string serializeTypeStr = config["SerializationType"]; SerializationProxy.SerializerType serializerType = SerializationProxy.SerializerType.BsonSerialization; if (!string.IsNullOrEmpty(serializeTypeStr)) { serializeTypeStr = serializeTypeStr.ToUpper(); switch (serializeTypeStr) { case "raw": serializerType = SerializationProxy.SerializerType.RawSerialization; break; case "bson": serializerType = SerializationProxy.SerializerType.BsonSerialization; break; default: throw new InvalidOperationException(""); } } Serializer(serializerType); }
private void ResetValues() { // set fields and not properties so base class items aren't set _authenticationProtocol = MongoAuthenticationProtocol.Strongest; _authenticationSource = null; _connectionMode = ConnectionMode.Automatic; _connectTimeout = MongoDefaults.ConnectTimeout; _databaseName = null; _fsync = null; _guidRepresentation = MongoDefaults.GuidRepresentation; _ipv6 = false; _journal = null; _maxConnectionIdleTime = MongoDefaults.MaxConnectionIdleTime; _maxConnectionLifeTime = MongoDefaults.MaxConnectionLifeTime; _maxConnectionPoolSize = MongoDefaults.MaxConnectionPoolSize; _minConnectionPoolSize = MongoDefaults.MinConnectionPoolSize; _password = null; _readPreference = null; _replicaSetName = null; _secondaryAcceptableLatency = MongoDefaults.SecondaryAcceptableLatency; _servers = null; _slaveOk = null; _socketTimeout = MongoDefaults.SocketTimeout; _username = null; _useSsl = false; _verifySslCertificate = true; _w = null; _waitQueueMultiple = MongoDefaults.WaitQueueMultiple; _waitQueueSize = MongoDefaults.WaitQueueSize; _waitQueueTimeout = MongoDefaults.WaitQueueTimeout; _wTimeout = null; }
private void ParseOption(string name, string value) { switch (name.ToLower()) { case "authmechanism": _authMechanism = value; break; case "authsource": _authSource = value; break; case "connecttimeout": case "connecttimeoutms": _connectTimeout = GetTimeSpan(name, value); break; case "fsync": _fsync = GetBoolean(name, value); break; case "gssapiservicename": _gssapiServiceName = value; break; case "ipv6": _ipv6 = GetBoolean(name, value); break; case "j": case "journal": _journal = GetBoolean(name, value); break; case "maxidletime": case "maxidletimems": _maxIdleTime = GetTimeSpan(name, value); break; case "maxlifetime": case "maxlifetimems": _maxLifeTime = GetTimeSpan(name, value); break; case "maxpoolsize": _maxPoolSize = GetInt32(name, value); break; case "minpoolsize": _minPoolSize = GetInt32(name, value); break; case "readpreference": _readPreference = GetEnum <ReadPreferenceMode>(name, value); break; case "readpreferencetags": var tagSet = GetReadPreferenceTagSets(name, value); if (_readPreferenceTags == null) { _readPreferenceTags = new List <TagSet> { tagSet }.AsReadOnly(); } else { _readPreferenceTags = _readPreferenceTags.Concat(new[] { tagSet }).ToList(); } break; case "replicaset": _replicaSet = value; break; case "secondaryacceptablelatency": case "secondaryacceptablelatencyms": _secondaryAcceptableLatency = GetTimeSpan(name, value); break; case "sockettimeout": case "sockettimeoutms": _socketTimeout = GetTimeSpan(name, value); break; case "ssl": _ssl = GetBoolean(name, value); break; case "sslverifycertificate": _sslVerifyCertificate = GetBoolean(name, value); break; case "guids": case "uuidrepresentation": _uuidRepresentation = GetEnum <GuidRepresentation>(name, value); break; case "w": _w = WriteConcern.WValue.Parse(value); break; case "wtimeout": case "wtimeoutms": _wTimeout = GetTimeSpan(name, value); break; case "waitqueuemultiple": _waitQueueMultiple = GetInt32(name, value); break; case "waitqueuetimeout": case "waitqueuetimeoutms": _waitQueueTimeout = GetTimeSpan(name, value); break; default: _unknownOptions.Add(name, value); break; } }
// constructors /// <summary> /// Creates a new instance of MongoUrlBuilder. /// </summary> public MongoUrlBuilder() { _authenticationMechanism = MongoDefaults.AuthenticationMechanism; _authenticationSource = null; _connectionMode = ConnectionMode.Automatic; _connectTimeout = MongoDefaults.ConnectTimeout; _databaseName = null; _fsync = null; _guidRepresentation = MongoDefaults.GuidRepresentation; _ipv6 = false; _journal = null; _maxConnectionIdleTime = MongoDefaults.MaxConnectionIdleTime; _maxConnectionLifeTime = MongoDefaults.MaxConnectionLifeTime; _maxConnectionPoolSize = MongoDefaults.MaxConnectionPoolSize; _minConnectionPoolSize = MongoDefaults.MinConnectionPoolSize; _password = null; _readPreference = null; _replicaSetName = null; _servers = null; _slaveOk = null; _socketTimeout = MongoDefaults.SocketTimeout; _username = null; _useSsl = false; _verifySslCertificate = true; _w = null; _waitQueueMultiple = MongoDefaults.WaitQueueMultiple; _waitQueueSize = MongoDefaults.WaitQueueSize; _waitQueueTimeout = MongoDefaults.WaitQueueTimeout; _wTimeout = null; }