/// <summary> /// Configures a cluster builder from a connection string. /// </summary> /// <param name="builder">The cluster builder.</param> /// <param name="connectionString">The connection string.</param> /// <returns>A reconfigured cluster builder.</returns> public static ClusterBuilder ConfigureWithConnectionString(this ClusterBuilder builder, ConnectionString connectionString) { Ensure.IsNotNull(builder, "builder"); Ensure.IsNotNull(connectionString, "connectionString"); // TCP if (connectionString.ConnectTimeout != null) { builder = builder.ConfigureTcp(s => s.With(connectTimeout: connectionString.ConnectTimeout.Value)); } if (connectionString.Ipv6.HasValue && connectionString.Ipv6.Value) { builder = builder.ConfigureTcp(s => s.With(addressFamily: AddressFamily.InterNetworkV6)); } if (connectionString.SocketTimeout != null) { builder = builder.ConfigureTcp(s => s.With( readTimeout: connectionString.SocketTimeout.Value, writeTimeout: connectionString.SocketTimeout.Value)); } if (connectionString.Ssl != null) { builder = builder.ConfigureSsl(ssl => { if (!connectionString.SslVerifyCertificate.GetValueOrDefault(true)) { ssl = ssl.With( serverCertificateValidationCallback: new RemoteCertificateValidationCallback(AcceptAnySslCertificate)); } return ssl; }); } // Connection if (connectionString.Username != null) { var authenticator = CreateAuthenticator(connectionString); builder = builder.ConfigureConnection(s => s.With(authenticators: new[] { authenticator })); } if (connectionString.MaxIdleTime != null) { builder = builder.ConfigureConnection(s => s.With(maxIdleTime: connectionString.MaxIdleTime.Value)); } if (connectionString.MaxLifeTime != null) { builder = builder.ConfigureConnection(s => s.With(maxLifeTime: connectionString.MaxLifeTime.Value)); } // Connection Pool if (connectionString.MaxPoolSize != null) { builder = builder.ConfigureConnectionPool(s => s.With(maxConnections: connectionString.MaxPoolSize.Value)); } if (connectionString.MinPoolSize != null) { builder = builder.ConfigureConnectionPool(s => s.With(minConnections: connectionString.MinPoolSize.Value)); } if (connectionString.WaitQueueSize != null) { builder = builder.ConfigureConnectionPool(s => s.With(waitQueueSize: connectionString.WaitQueueSize.Value)); } else if (connectionString.WaitQueueMultiple != null) { var maxConnections = connectionString.MaxPoolSize ?? new ConnectionPoolSettings().MaxConnections; var waitQueueSize = (int)Math.Round(maxConnections * connectionString.WaitQueueMultiple.Value); builder = builder.ConfigureConnectionPool(s => s.With(waitQueueSize: waitQueueSize)); } if (connectionString.WaitQueueTimeout != null) { builder = builder.ConfigureConnectionPool(s => s.With(waitQueueTimeout: connectionString.WaitQueueTimeout.Value)); } // Server // Cluster if (connectionString.Hosts.Count > 0) { builder = builder.ConfigureCluster(s => s.With(endPoints: Optional.Enumerable(connectionString.Hosts))); } if (connectionString.ReplicaSet != null) { builder = builder.ConfigureCluster(s => s.With( replicaSetName: connectionString.ReplicaSet)); } if (connectionString.ServerSelectionTimeout != null) { builder = builder.ConfigureCluster(s => s.With(serverSelectionTimeout: connectionString.ServerSelectionTimeout.Value)); } return builder; }
public static ClusterBuilder ConfigureWithConnectionString(this ClusterBuilder configuration, ConnectionString connectionString) { Ensure.IsNotNull(configuration, "configuration"); Ensure.IsNotNull(connectionString, "connectionString"); // TCP if (connectionString.ConnectTimeout != null) { // TODO: nowhere to set this } if (connectionString.Ipv6.HasValue && connectionString.Ipv6.Value) { configuration.ConfigureTcp(s => s.WithAddressFamily(AddressFamily.InterNetworkV6)); } if (connectionString.SocketTimeout != null) { configuration.ConfigureTcp(s => s .WithReadTimeout(connectionString.SocketTimeout.Value) .WithWriteTimeout(connectionString.SocketTimeout.Value)); } if (connectionString.Ssl != null) { // TODO: nowhere to set this } // Connection if (connectionString.Username != null) { // TODO: nowhere to set this... } if (connectionString.MaxIdleTime != null) { configuration.ConfigureConnection(s => s.WithMaxIdleTime(connectionString.MaxIdleTime.Value)); } if (connectionString.MaxLifeTime != null) { configuration.ConfigureConnection(s => s.WithMaxLifeTime(connectionString.MaxLifeTime.Value)); } // Connection Pool if (connectionString.MaxPoolSize != null) { configuration.ConfigureConnectionPool(s => s.WithMaxConnections(connectionString.MaxPoolSize.Value)); } if (connectionString.MinPoolSize != null) { configuration.ConfigureConnectionPool(s => s.WithMinConnections(connectionString.MinPoolSize.Value)); } if (connectionString.WaitQueueMultiple != null) { var maxConnections = connectionString.MaxPoolSize ?? new ConnectionPoolSettings().MaxConnections; var waitQueueSize = maxConnections * connectionString.WaitQueueMultiple.Value; configuration.ConfigureConnectionPool(s => s.WithWaitQueueSize(waitQueueSize)); } if (connectionString.WaitQueueTimeout != null) { configuration.ConfigureConnectionPool(s => s.WithWaitQueueTimeout(connectionString.WaitQueueTimeout.Value)); } // Server // Cluster if (connectionString.Hosts.Count > 0) { configuration.ConfigureCluster(s => s.WithEndPoints(connectionString.Hosts)); } if (connectionString.ReplicaSet != null) { configuration.ConfigureCluster(s => s .WithReplicaSetName(connectionString.ReplicaSet)); } return configuration; }