/// <summary> /// Initializes a new instance of the <see cref="ServiceBusConnection"/> class. /// </summary> /// /// <param name="fullyQualifiedNamespace">The fully qualified Service Bus namespace to connect to. This is likely to be similar to <c>{yournamespace}.servicebus.windows.net</c>.</param> /// <param name="credential">The Azure managed identity credential to use for authorization. Access controls may be specified by the Service Bus namespace or the requested Service Bus entity, depending on Azure configuration.</param> /// <param name="options">A set of options to apply when configuring the connection.</param> internal ServiceBusConnection( string fullyQualifiedNamespace, TokenCredential credential, ServiceBusClientOptions options) { Argument.AssertWellFormedServiceBusNamespace(fullyQualifiedNamespace, nameof(fullyQualifiedNamespace)); Argument.AssertNotNull(credential, nameof(credential)); options = options?.Clone() ?? new ServiceBusClientOptions(); ValidateConnectionOptions(options); switch (credential) { case SharedAccessSignatureCredential _: break; case ServiceBusSharedKeyCredential sharedKeyCredential: credential = sharedKeyCredential.AsSharedAccessSignatureCredential(BuildAudienceResource(options.TransportType, fullyQualifiedNamespace, EntityPath)); break; } var tokenCredential = new ServiceBusTokenCredential(credential, BuildAudienceResource(options.TransportType, fullyQualifiedNamespace, EntityPath)); FullyQualifiedNamespace = fullyQualifiedNamespace; TransportType = options.TransportType; Options = options; RetryOptions = options.RetryOptions; #pragma warning disable CA2214 // Do not call overridable methods in constructors. This internal method is virtual for testing purposes. _innerClient = CreateTransportClient(tokenCredential, options); #pragma warning restore CA2214 // Do not call overridable methods in constructors }
/// <summary> /// Initializes a new instance of the <see cref="ServiceBusConnection"/> class. /// </summary> /// /// <param name="fullyQualifiedNamespace">The fully qualified Service Bus namespace to connect to. This is likely to be similar to <c>{yournamespace}.servicebus.windows.net</c>.</param> /// <param name="credential">The Azure managed identity credential to use for authorization. Access controls may be specified by the Service Bus namespace or the requested Service Bus entity, depending on Azure configuration.</param> /// <param name="options">A set of options to apply when configuring the connection.</param> /// internal ServiceBusConnection( string fullyQualifiedNamespace, TokenCredential credential, ServiceBusClientOptions options) { Argument.AssertWellFormedServiceBusNamespace(fullyQualifiedNamespace, nameof(fullyQualifiedNamespace)); Argument.AssertNotNull(credential, nameof(credential)); options = options?.Clone() ?? new ServiceBusClientOptions(); ValidateConnectionOptions(options); switch (credential) { case SharedAccessSignatureCredential _: break; case ServiceBusSharedKeyCredential sharedKeyCredential: credential = sharedKeyCredential.AsSharedAccessSignatureCredential(BuildAudienceResource(options.TransportType, fullyQualifiedNamespace, EntityPath)); break; } var tokenCredential = new ServiceBusTokenCredential(credential, BuildAudienceResource(options.TransportType, fullyQualifiedNamespace, EntityPath)); FullyQualifiedNamespace = fullyQualifiedNamespace; TransportType = options.TransportType; Options = options; RetryOptions = options.RetryOptions; _innerClient = CreateTransportClient(tokenCredential, options); }
/// <summary> /// Initializes a new instance of the <see cref="ServiceBusConnection"/> class. /// </summary> /// /// <param name="connectionString">The connection string to use for connecting to the Service Bus namespace.</param> /// <param name="options">A set of options to apply when configuring the connection.</param> /// /// <remarks> /// If the connection string is copied from the Service Bus entity itself, it will contain the name of the desired Service Bus entity, /// and can be used directly without passing the name="entityName" />. The name of the Service Bus entity should be /// passed only once, either as part of the connection string or separately. /// </remarks> /// internal ServiceBusConnection( string connectionString, ServiceBusClientOptions options) { Argument.AssertNotNullOrEmpty(connectionString, nameof(connectionString)); Argument.AssertNotNull(options, nameof(options)); options = options.Clone(); ValidateConnectionOptions(options); var builder = new ServiceBusConnectionStringBuilder(connectionString); FullyQualifiedNamespace = builder.FullyQualifiedNamespace; TransportType = options.TransportType; EntityPath = builder.EntityName; var sharedAccessSignature = new SharedAccessSignature ( BuildAudienceResource(options.TransportType, FullyQualifiedNamespace, EntityPath), builder.SasKeyName, builder.SasKey ); var sharedCredentials = new SharedAccessSignatureCredential(sharedAccessSignature); var tokenCredentials = new ServiceBusTokenCredential( sharedCredentials, BuildAudienceResource(options.TransportType, FullyQualifiedNamespace, EntityPath)); _innerClient = CreateTransportClient(tokenCredentials, options); }
/// <summary> /// Initializes a new instance of the <see cref="ServiceBusConnection"/> class. /// </summary> /// /// <param name="fullyQualifiedNamespace">The fully qualified Service Bus namespace to connect to. This is likely to be similar to <c>{yournamespace}.servicebus.windows.net</c>.</param> /// <param name="credential">The Azure managed identity credential to use for authorization. Access controls may be specified by the Service Bus namespace or the requested Service Bus entity, depending on Azure configuration.</param> /// <param name="connectionOptions">A set of options to apply when configuring the connection.</param> /// internal ServiceBusConnection( string fullyQualifiedNamespace, TokenCredential credential, ServiceBusClientOptions connectionOptions = default) { Argument.AssertNotNullOrEmpty(fullyQualifiedNamespace, nameof(fullyQualifiedNamespace)); Argument.AssertNotNull(credential, nameof(credential)); connectionOptions = connectionOptions?.Clone() ?? new ServiceBusClientOptions(); ValidateConnectionOptions(connectionOptions); switch (credential) { case SharedAccessSignatureCredential _: break; case ServiceBusSharedKeyCredential sharedKeyCredential: credential = sharedKeyCredential.AsSharedAccessSignatureCredential(BuildAudienceResource(connectionOptions.TransportType, fullyQualifiedNamespace, EntityName)); break; } var tokenCredential = new ServiceBusTokenCredential(credential, BuildAudienceResource(connectionOptions.TransportType, fullyQualifiedNamespace, EntityName)); FullyQualifiedNamespace = fullyQualifiedNamespace; TransportType = connectionOptions.TransportType; _innerClient = CreateTransportClient(tokenCredential, connectionOptions); }
/// <summary> /// Initializes a new instance of the <see cref="ServiceBusClient"/> class. /// </summary> /// /// <param name="connectionString">The connection string to use for connecting to the /// Service Bus namespace.</param> /// <param name="options">The set of <see cref="ServiceBusClientOptions"/> to use for /// configuring this <see cref="ServiceBusClient"/>.</param> /// /// <remarks> /// If the connection string specifies a specific entity name, any subsequent calls to /// <see cref="CreateSender(string)"/>, <see cref="CreateReceiver(string)"/>, /// <see cref="CreateProcessor(string)"/> etc. must still specify the same entity name. /// </remarks> public ServiceBusClient(string connectionString, ServiceBusClientOptions options) { _options = options?.Clone() ?? new ServiceBusClientOptions(); Connection = new ServiceBusConnection(connectionString, _options); Logger.ClientCreateStart(typeof(ServiceBusClient), FullyQualifiedNamespace); Identifier = DiagnosticUtilities.GenerateIdentifier(FullyQualifiedNamespace); Plugins = _options.Plugins; Logger.ClientCreateComplete(typeof(ServiceBusClient), Identifier); }
/// <summary> /// Initializes a new instance of the <see cref="ServiceBusClient"/> class. /// </summary> /// /// <param name="fullyQualifiedNamespace">The fully qualified Service Bus namespace to connect to. /// This is likely to be similar to <c>{yournamespace}.servicebus.windows.net</c>.</param> /// <param name="credential">The <see cref="ServiceBusSharedAccessKeyCredential"/> to use for authorization. Access controls may be specified by the Service Bus namespace.</param> /// <param name="options">The set of <see cref="ServiceBusClientOptions"/> to use for configuring this <see cref="ServiceBusClient"/>.</param> internal ServiceBusClient( string fullyQualifiedNamespace, ServiceBusSharedAccessKeyCredential credential, ServiceBusClientOptions options) { _options = options?.Clone() ?? new ServiceBusClientOptions(); Logger.ClientCreateStart(typeof(ServiceBusClient), fullyQualifiedNamespace); Identifier = DiagnosticUtilities.GenerateIdentifier(fullyQualifiedNamespace); Connection = new ServiceBusConnection( fullyQualifiedNamespace, credential, _options); Plugins = _options.Plugins; Logger.ClientCreateComplete(typeof(ServiceBusClient), Identifier); }
/// <summary> /// Initializes a new instance of the <see cref="ServiceBusConnection"/> class. /// </summary> /// /// <param name="connectionString">The connection string to use for connecting to the Service Bus namespace.</param> /// <param name="options">A set of options to apply when configuring the connection.</param> /// /// <remarks> /// If the connection string is copied from the Service Bus entity itself, it will contain the name of the desired Service Bus entity, /// and can be used directly without passing the name="entityName" />. The name of the Service Bus entity should be /// passed only once, either as part of the connection string or separately. /// </remarks> /// internal ServiceBusConnection( string connectionString, ServiceBusClientOptions options) { Argument.AssertNotNullOrEmpty(connectionString, nameof(connectionString)); options = options?.Clone() ?? new ServiceBusClientOptions(); ValidateConnectionOptions(options); ConnectionStringProperties connectionStringProperties = ConnectionStringParser.Parse(connectionString); if (string.IsNullOrEmpty(connectionStringProperties.Endpoint?.Host) || string.IsNullOrEmpty(connectionStringProperties.SharedAccessKeyName) || string.IsNullOrEmpty(connectionStringProperties.SharedAccessKey)) { throw new ArgumentException(Resources.MissingConnectionInformation, nameof(connectionString)); } FullyQualifiedNamespace = connectionStringProperties.Endpoint.Host; TransportType = options.TransportType; EntityPath = connectionStringProperties.EntityPath; Options = options; RetryOptions = options.RetryOptions; var sharedAccessSignature = new SharedAccessSignature ( BuildAudienceResource(options.TransportType, FullyQualifiedNamespace, EntityPath), connectionStringProperties.SharedAccessKeyName, connectionStringProperties.SharedAccessKey ); var sharedCredential = new SharedAccessSignatureCredential(sharedAccessSignature); var tokenCredential = new ServiceBusTokenCredential( sharedCredential, BuildAudienceResource(TransportType, FullyQualifiedNamespace, EntityPath)); #pragma warning disable CA2214 // Do not call overridable methods in constructors. This internal method is virtual for testing purposes. _innerClient = CreateTransportClient(tokenCredential, options); #pragma warning restore CA2214 // Do not call overridable methods in constructors }