// 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;
 }
예제 #2
0
        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;
            }
        }
예제 #3
0
        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;
            }
        }
예제 #4
0
 // 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;
 }
예제 #5
0
        /// <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;
        }
예제 #6
0
        /// <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;
 }