public QueueConnectionFactory(
            ConnectionFactory connectionFactory,
            IQueueConfiguration queueWrapperConfig,
            ICertificateHelper certificateHelper)
        {
            _connectionFactory  = connectionFactory ?? throw new ArgumentNullException(nameof(connectionFactory));
            _queueWrapperConfig = queueWrapperConfig ?? throw new ArgumentNullException(nameof(QueueConnectionFactory));

            if (certificateHelper == null)
            {
                throw new ArgumentNullException(nameof(certificateHelper));
            }

            // verify that the queue configuration is valid
            if (!_queueWrapperConfig.IsValid)
            {
                throw new ArgumentException("Queue Configuration is not valid", nameof(_queueWrapperConfig));
            }

            _connections = new ConcurrentDictionary <string, IConnectionHandler>();

            _connectionFactory = connectionFactory;
            _connectionFactory.AuthMechanisms               = new[] { new ExternalMechanismFactory() };
            _connectionFactory.Uri                          = _queueWrapperConfig.Uri;
            _connectionFactory.Ssl.ServerName               = queueWrapperConfig.Uri.Host;
            _connectionFactory.ContinuationTimeout          = TimeSpan.FromSeconds(queueWrapperConfig.ProtocolTimeoutIntervalSeconds);
            _connectionFactory.HandshakeContinuationTimeout = TimeSpan.FromSeconds(queueWrapperConfig.ProtocolTimeoutIntervalSeconds);

            var certificateResult = !string.IsNullOrEmpty(queueWrapperConfig.CertificatePath)
                ? certificateHelper.TryLoadCertificate(queueWrapperConfig.ClientCertificateSubjectName, queueWrapperConfig.CertificatePath, queueWrapperConfig.CertificatePassword)
                : certificateHelper.TryFindCertificate(queueWrapperConfig.ClientCertificateSubjectName);

            if (!certificateResult.Success)
            {
                throw new FatalErrorException(
                          string.Format(Resources.CouldNotFindCertificateError, queueWrapperConfig.ClientCertificateSubjectName, certificateResult.Message));
            }
            var certificates = certificateResult.Certificates;

            _connectionFactory.Ssl.Certs   = certificates;
            _connectionFactory.Ssl.Version = System.Security.Authentication.SslProtocols.Tls12;
            _connectionFactory.Ssl.Enabled = true;
            _connectionFactory.AutomaticRecoveryEnabled = queueWrapperConfig.AutomaticRecoveryEnabled;
            _connectionFactory.NetworkRecoveryInterval  = TimeSpan.FromSeconds(queueWrapperConfig.NetworkRecoveryIntervalSeconds);
            _connectionFactory.RequestedHeartbeat       = queueWrapperConfig.RabbitMQHeartbeatSeconds;
        }
Example #2
0
        public QueueConnectionFactory(
            ConnectionFactory connectionFactory,
            IQueueConfiguration queueWrapperConfig,
            ICertificateHelper certificateHelper)
        {
            _connectionFactory  = connectionFactory ?? throw new ArgumentNullException(nameof(connectionFactory));
            _queueWrapperConfig = queueWrapperConfig ?? throw new ArgumentNullException(nameof(QueueConnectionFactory));
            if (certificateHelper == null)
            {
                throw new ArgumentNullException(nameof(certificateHelper));
            }

            _connections = new ConcurrentDictionary <string, IConnectionHandler>();

            _connectionFactory = connectionFactory;
            _connectionFactory.AuthMechanisms               = new[] { new ExternalMechanismFactory() };
            _connectionFactory.Uri                          = _queueWrapperConfig.Uri;
            _connectionFactory.Ssl.ServerName               = queueWrapperConfig.Uri.Host;
            _connectionFactory.ContinuationTimeout          = TimeSpan.FromSeconds(queueWrapperConfig.ProtocolTimeoutIntervalSeconds);
            _connectionFactory.HandshakeContinuationTimeout = TimeSpan.FromSeconds(queueWrapperConfig.ProtocolTimeoutIntervalSeconds);

            X509Certificate2Collection certificates;

            if (!certificateHelper.TryFindCertificate(queueWrapperConfig.ClientCertificateSubjectName, out certificates))
            {
                throw new FatalErrorException(
                          string.Format(Resources.CouldNotFindCertificateError, queueWrapperConfig.ClientCertificateSubjectName, certificates.Count));
            }

            _connectionFactory.Ssl.Certs   = certificates;
            _connectionFactory.Ssl.Version = System.Security.Authentication.SslProtocols.Tls12;
            _connectionFactory.Ssl.Enabled = true;
            _connectionFactory.AutomaticRecoveryEnabled = queueWrapperConfig.AutomaticRecoveryEnabled;
            _connectionFactory.NetworkRecoveryInterval  = TimeSpan.FromSeconds(queueWrapperConfig.NetworkRecoveryIntervalSeconds);
            _connectionFactory.RequestedHeartbeat       = queueWrapperConfig.RabbitMQHeartbeatSeconds;

            //this.ConnectionShuttingDown = false;
            //this.cancellationToken = cancellationToken;
            //this.cancellationToken.Register(ConnectionCancelled);
        }
Example #3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="AzureKeyVaultClient"/> class.
 /// Unlike the KeyVaultClient, it takes the full <see cref="ICertificateHelper"/> and converts it to the callback.
 /// </summary>
 /// <param name="cert">Certificate helper</param>
 public AzureKeyVaultClient(ICertificateHelper cert)
 {
     this.client = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(cert.GetAccessToken));
 }