public Task<IBinding> TryCreateAsync(BindingProviderContext context) { if (context == null) { throw new ArgumentNullException("context"); } ParameterInfo parameter = context.Parameter; ServiceBusAttribute attribute = parameter.GetCustomAttribute<ServiceBusAttribute>(inherit: false); if (attribute == null) { return Task.FromResult<IBinding>(null); } string queueOrTopicName = Resolve(attribute.QueueOrTopicName); IBindableServiceBusPath path = BindableServiceBusPath.Create(queueOrTopicName); ValidateContractCompatibility(path, context.BindingDataContract); IArgumentBinding<ServiceBusEntity> argumentBinding = InnerProvider.TryCreate(parameter); if (argumentBinding == null) { throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "Can't bind ServiceBus to type '{0}'.", parameter.ParameterType)); } string connectionName = ServiceBusAccount.GetAccountOverrideOrNull(context.Parameter); ServiceBusAccount account = new ServiceBusAccount { MessagingFactory = _config.MessagingProvider.CreateMessagingFactory(queueOrTopicName, connectionName), NamespaceManager = _config.MessagingProvider.CreateNamespaceManager(connectionName) }; IBinding binding = new ServiceBusBinding(parameter.Name, argumentBinding, account, path, attribute.Access); return Task.FromResult<IBinding>(binding); }
public ServiceBusQueueListenerFactory(ServiceBusAccount account, string queueName, ITriggeredFunctionExecutor executor, AccessRights accessRights) { _namespaceManager = account.NamespaceManager; _messagingFactory = account.MessagingFactory; _queueName = queueName; _executor = executor; _accessRights = accessRights; }
public async Task CreateAsync_AccessRightsNotManage_DoesNotCreateTopicOrSubscription(AccessRights accessRights) { ServiceBusAccount account = new ServiceBusAccount(); Mock<ITriggeredFunctionExecutor> mockExecutor = new Mock<ITriggeredFunctionExecutor>(MockBehavior.Strict); ServiceBusSubscriptionListenerFactory factory = new ServiceBusSubscriptionListenerFactory(account, "testtopic", "testsubscription", mockExecutor.Object, accessRights, new ServiceBusConfiguration()); IListener listener = await factory.CreateAsync(CancellationToken.None); Assert.NotNull(listener); }
public ServiceBusSubscriptionListenerFactory(ServiceBusAccount account, string topicName, string subscriptionName, ITriggeredFunctionExecutor executor, AccessRights accessRights) { _namespaceManager = account.NamespaceManager; _messagingFactory = account.MessagingFactory; _topicName = topicName; _subscriptionName = subscriptionName; _executor = executor; _accessRights = accessRights; }
public async Task<ITriggerBinding> TryCreateAsync(TriggerBindingProviderContext context) { if (context == null) { throw new ArgumentNullException("context"); } ParameterInfo parameter = context.Parameter; ServiceBusTriggerAttribute attribute = parameter.GetCustomAttribute<ServiceBusTriggerAttribute>(inherit: false); if (attribute == null) { return null; } string queueName = null; string topicName = null; string subscriptionName = null; string entityPath = null; if (attribute.QueueName != null) { queueName = Resolve(attribute.QueueName); entityPath = queueName; } else { topicName = Resolve(attribute.TopicName); subscriptionName = Resolve(attribute.SubscriptionName); entityPath = SubscriptionClient.FormatSubscriptionPath(topicName, subscriptionName); } ITriggerDataArgumentBinding<BrokeredMessage> argumentBinding = InnerProvider.TryCreate(parameter); if (argumentBinding == null) { throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "Can't bind ServiceBusTrigger to type '{0}'.", parameter.ParameterType)); } string connectionName = ServiceBusAccount.GetAccountOverrideOrNull(context.Parameter); ServiceBusAccount account = new ServiceBusAccount { MessagingFactory = await _config.MessagingProvider.CreateMessagingFactoryAsync(entityPath, connectionName), NamespaceManager = _config.MessagingProvider.CreateNamespaceManager(connectionName) }; ITriggerBinding binding; if (queueName != null) { binding = new ServiceBusTriggerBinding(parameter.Name, parameter.ParameterType, argumentBinding, account, queueName, attribute.Access, _config); } else { binding = new ServiceBusTriggerBinding(parameter.Name, argumentBinding, account, topicName, subscriptionName, attribute.Access, _config); } return binding; }
public async Task CreateAsync_AccessRightsNotManage_DoesNotCreateQueue(AccessRights accessRights) { ServiceBusAccount account = new ServiceBusAccount(); Mock<ITriggeredFunctionExecutor> mockExecutor = new Mock<ITriggeredFunctionExecutor>(MockBehavior.Strict); ServiceBusQueueListenerFactory factory = new ServiceBusQueueListenerFactory(account, "testqueue", mockExecutor.Object, accessRights); IListener listener = await factory.CreateAsync(CancellationToken.None); Assert.NotNull(listener); }
public ServiceBusBinding(string parameterName, IArgumentBinding<ServiceBusEntity> argumentBinding, ServiceBusAccount account, IBindableServiceBusPath path, AccessRights accessRights) { _parameterName = parameterName; _argumentBinding = argumentBinding; _account = account; _namespaceName = ServiceBusClient.GetNamespaceName(account); _path = path; _accessRights = accessRights; _converter = CreateConverter(account, path, accessRights); }
public ServiceBusTriggerBinding(string parameterName, ITriggerDataArgumentBinding<BrokeredMessage> argumentBinding, ServiceBusAccount account, string topicName, string subscriptionName, AccessRights accessRights) { _parameterName = parameterName; _argumentBinding = argumentBinding; _account = account; _namespaceName = ServiceBusClient.GetNamespaceName(account); _topicName = topicName; _subscriptionName = subscriptionName; _entityPath = SubscriptionClient.FormatSubscriptionPath(topicName, subscriptionName); _accessRights = accessRights; }
public ServiceBusTriggerBinding(string parameterName, Type parameterType, ITriggerDataArgumentBinding<BrokeredMessage> argumentBinding, ServiceBusAccount account, string queueName, AccessRights accessRights) { _parameterName = parameterName; _converter = CreateConverter(parameterType); _argumentBinding = argumentBinding; _account = account; _namespaceName = ServiceBusClient.GetNamespaceName(account); _queueName = queueName; _entityPath = queueName; _accessRights = accessRights; }
public ServiceBusTriggerBinding(string parameterName, Type parameterType, ITriggerDataArgumentBinding <Message> argumentBinding, ServiceBusAccount account, ServiceBusOptions options, MessagingProvider messagingProvider, EntityType entityType, string entityPath, bool isSessionsEnabled, ILoggerFactory loggerFactory) { _parameterName = parameterName; _converter = CreateConverter(parameterType); _argumentBinding = argumentBinding; _bindingDataContract = CreateBindingDataContract(argumentBinding.BindingDataContract); _account = account; _options = options; _messagingProvider = messagingProvider; _entityType = entityType; _entityPath = entityPath; _isSessionsEnabled = isSessionsEnabled; _loggerFactory = loggerFactory; }
public Task <ITriggerBinding> TryCreateAsync(TriggerBindingProviderContext context) { ParameterInfo parameter = context.Parameter; ServiceBusTriggerAttribute serviceBusTrigger = parameter.GetCustomAttribute <ServiceBusTriggerAttribute>(inherit: false); if (serviceBusTrigger == null) { return(Task.FromResult <ITriggerBinding>(null)); } string queueName = null; string topicName = null; string subscriptionName = null; if (serviceBusTrigger.QueueName != null) { queueName = Resolve(serviceBusTrigger.QueueName); } else { topicName = Resolve(serviceBusTrigger.TopicName); subscriptionName = Resolve(serviceBusTrigger.SubscriptionName); } ITriggerDataArgumentBinding <BrokeredMessage> argumentBinding = _innerProvider.TryCreate(parameter); if (argumentBinding == null) { throw new InvalidOperationException("Can't bind ServiceBusTrigger to type '" + parameter.ParameterType + "'."); } string connectionString = _accountProvider.ConnectionString; ServiceBusAccount account = ServiceBusAccount.CreateFromConnectionString(connectionString); ITriggerBinding binding; if (queueName != null) { binding = new ServiceBusTriggerBinding(parameter.Name, parameter.ParameterType, argumentBinding, account, queueName); } else { binding = new ServiceBusTriggerBinding(parameter.Name, argumentBinding, account, topicName, subscriptionName); } return(Task.FromResult(binding)); }
public Task <ITriggerBinding> TryCreateAsync(TriggerBindingProviderContext context) { if (context == null) { throw new ArgumentNullException("context"); } ParameterInfo parameter = context.Parameter; var attribute = TypeUtility.GetResolvedAttribute <ServiceBusTriggerAttribute>(parameter); if (attribute == null) { return(Task.FromResult <ITriggerBinding>(null)); } string queueName = null; string topicName = null; string subscriptionName = null; string entityPath = null; if (attribute.QueueName != null) { queueName = Resolve(attribute.QueueName); entityPath = queueName; } else { topicName = Resolve(attribute.TopicName); subscriptionName = Resolve(attribute.SubscriptionName); entityPath = EntityNameHelper.FormatSubscriptionPath(topicName, subscriptionName); } ITriggerDataArgumentBinding <Message> argumentBinding = InnerProvider.TryCreate(parameter); if (argumentBinding == null) { throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "Can't bind ServiceBusTrigger to type '{0}'.", parameter.ParameterType)); } attribute.Connection = Resolve(attribute.Connection); ServiceBusAccount account = new ServiceBusAccount(_options, _configuration, attribute); ITriggerBinding binding = new ServiceBusTriggerBinding(parameter.Name, parameter.ParameterType, argumentBinding, account, _options, _messagingProvider, entityPath, attribute.IsSessionsEnabled); return(Task.FromResult <ITriggerBinding>(binding)); }
public ServiceBusListener(string entityPath, bool isSessionsEnabled, ServiceBusTriggerExecutor triggerExecutor, ServiceBusOptions config, ServiceBusAccount serviceBusAccount, MessagingProvider messagingProvider) { _entityPath = entityPath; _isSessionsEnabled = isSessionsEnabled; _triggerExecutor = triggerExecutor; _cancellationTokenSource = new CancellationTokenSource(); _messagingProvider = messagingProvider; _serviceBusAccount = serviceBusAccount; if (_isSessionsEnabled) { _sessionMessageProcessor = _messagingProvider.CreateSessionMessageProcessor(entityPath, _serviceBusAccount.ConnectionString); } else { _messageProcessor = _messagingProvider.CreateMessageProcessor(entityPath, _serviceBusAccount.ConnectionString); } _serviceBusOptions = config; }
public void StorageAccountOverrides() { // param level MethodInfo method = typeof(AccountOverrides).GetMethod("ParamOverride", BindingFlags.NonPublic | BindingFlags.Instance); ParameterInfo parameter = method.GetParameters().Single(p => p.Name == "s"); string connectionName = ServiceBusAccount.GetAccountOverrideOrNull(parameter); Assert.Equal("param", connectionName); // method level method = typeof(AccountOverrides).GetMethod("MethodOverride", BindingFlags.NonPublic | BindingFlags.Instance); parameter = method.GetParameters().Single(p => p.Name == "s"); connectionName = ServiceBusAccount.GetAccountOverrideOrNull(parameter); Assert.Equal("method", connectionName); method = typeof(AccountOverrides).GetMethod("ClassOverride", BindingFlags.NonPublic | BindingFlags.Instance); parameter = method.GetParameters().Single(p => p.Name == "s"); connectionName = ServiceBusAccount.GetAccountOverrideOrNull(parameter); Assert.Equal("class", connectionName); }
public async Task CreateAsync_Success() { var configuration = new ConfigurationBuilder() .AddEnvironmentVariables() .Build(); var config = new ServiceBusOptions { ConnectionString = configuration.GetWebJobsConnectionString("ServiceBus") }; var messagingProvider = new MessagingProvider(new OptionsWrapper <ServiceBusOptions>(config)); var account = new ServiceBusAccount(config, configuration); Mock <ITriggeredFunctionExecutor> mockExecutor = new Mock <ITriggeredFunctionExecutor>(MockBehavior.Strict); ServiceBusQueueListenerFactory factory = new ServiceBusQueueListenerFactory(account, "testqueue", mockExecutor.Object, config, messagingProvider); IListener listener = await factory.CreateAsync(CancellationToken.None); Assert.NotNull(listener); }
public Task <IBinding> TryCreateAsync(BindingProviderContext context) { if (context == null) { throw new ArgumentNullException("context"); } ParameterInfo parameter = context.Parameter; ServiceBusAttribute attribute = parameter.GetCustomAttribute <ServiceBusAttribute>(inherit: false); if (attribute == null) { return(Task.FromResult <IBinding>(null)); } string queueOrTopicName = Resolve(attribute.QueueOrTopicName); IBindableServiceBusPath path = BindableServiceBusPath.Create(queueOrTopicName); ValidateContractCompatibility(path, context.BindingDataContract); IArgumentBinding <ServiceBusEntity> argumentBinding = InnerProvider.TryCreate(parameter); if (argumentBinding == null) { throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "Can't bind ServiceBus to type '{0}'.", parameter.ParameterType)); } string connectionName = ServiceBusAccount.GetAccountOverrideOrNull(context.Parameter); ServiceBusAccount account = new ServiceBusAccount { MessagingFactory = _config.MessagingProvider.CreateMessagingFactory(queueOrTopicName, connectionName), NamespaceManager = _config.MessagingProvider.CreateNamespaceManager(connectionName) }; IBinding binding = new ServiceBusBinding(parameter.Name, argumentBinding, account, path, attribute.Access); return(Task.FromResult <IBinding>(binding)); }
public void GetConnectionString_ThrowsIfConnectionStringNullOrEmpty() { var config = new ServiceBusOptions(); var attribute = new ServiceBusTriggerAttribute("testqueue"); attribute.Connection = "MissingConnection"; var ex = Assert.Throws <InvalidOperationException>(() => { var account = new ServiceBusAccount(config, _configuration, attribute); var cs = account.ConnectionString; }); Assert.AreEqual("Microsoft Azure WebJobs SDK ServiceBus connection string 'MissingConnection' is missing or empty.", ex.Message); attribute.Connection = null; config.ConnectionString = null; ex = Assert.Throws <InvalidOperationException>(() => { var account = new ServiceBusAccount(config, _configuration, attribute); var cs = account.ConnectionString; }); Assert.AreEqual("Microsoft Azure WebJobs SDK ServiceBus connection string 'AzureWebJobsServiceBus' is missing or empty.", ex.Message); }
public ServiceBusTriggerBinding(string parameterName, Type parameterType, ITriggerDataArgumentBinding <Message> argumentBinding, ServiceBusAccount account, ServiceBusConfiguration config, string queueName) : this(parameterName, parameterType, argumentBinding, account, config) { _queueName = queueName; _entityPath = queueName; }
public StringToServiceBusEntityConverter(ServiceBusAccount account, IBindableServiceBusPath defaultPath) { _account = account; _defaultPath = defaultPath; }
public ServiceBusTriggerBinding(string parameterName, ITriggerDataArgumentBinding <BrokeredMessage> argumentBinding, ServiceBusAccount account, string topicName, string subscriptionName) { _parameterName = parameterName; _argumentBinding = argumentBinding; _account = account; _namespaceName = ServiceBusClient.GetNamespaceName(account); _topicName = topicName; _subscriptionName = subscriptionName; _entityPath = SubscriptionClient.FormatSubscriptionPath(topicName, subscriptionName); }
public ServiceBusTriggerBinding(string parameterName, Type parameterType, ITriggerDataArgumentBinding <BrokeredMessage> argumentBinding, ServiceBusAccount account, string queueName) { _parameterName = parameterName; _converter = CreateConverter(parameterType); _argumentBinding = argumentBinding; _account = account; _namespaceName = ServiceBusClient.GetNamespaceName(account); _queueName = queueName; _entityPath = queueName; }
public StringToServiceBusEntityConverter(ServiceBusAccount account, IBindableServiceBusPath defaultPath, AccessRights accessRights) { _account = account; _defaultPath = defaultPath; _accessRights = accessRights; }
private static IAsyncObjectToTypeConverter<ServiceBusEntity> CreateConverter(ServiceBusAccount account, IBindableServiceBusPath queueOrTopicName, AccessRights accessRights) { return new OutputConverter<string>(new StringToServiceBusEntityConverter(account, queueOrTopicName, accessRights)); }
public ServiceBusBinding(string parameterName, IArgumentBinding <ServiceBusEntity> argumentBinding, ServiceBusAccount account, IBindableServiceBusPath path, ServiceBusAttribute attr) { _parameterName = parameterName; _argumentBinding = argumentBinding; _account = account; _namespaceName = ServiceBusClient.GetNamespaceName(account); _path = path; _accessRights = attr.Access; _entityType = attr.EntityType; _converter = new OutputConverter <string>( new StringToServiceBusEntityConverter(account, _path, _accessRights, _entityType)); }
public ServiceBusTriggerBinding(string parameterName, Type parameterType, ITriggerDataArgumentBinding <Message> argumentBinding, ServiceBusAccount account, ServiceBusOptions options, MessagingProvider messagingProvider, string topicName, string subscriptionName) : this(parameterName, parameterType, argumentBinding, account, options, messagingProvider) { _topicName = topicName; _subscriptionName = subscriptionName; _entityPath = EntityNameHelper.FormatSubscriptionPath(topicName, subscriptionName); }
public ServiceBusTriggerBinding(string parameterName, Type parameterType, ITriggerDataArgumentBinding <Message> argumentBinding, ServiceBusAccount account, ServiceBusOptions options, MessagingProvider messagingProvider, string queueName) : this(parameterName, parameterType, argumentBinding, account, options, messagingProvider) { _queueName = queueName; _entityPath = queueName; }
public ServiceBusTriggerBinding(string parameterName, Type parameterType, ITriggerDataArgumentBinding <BrokeredMessage> argumentBinding, ServiceBusAccount account, AccessRights accessRights, ServiceBusConfiguration config, string topicName, string subscriptionName) : this(parameterName, parameterType, argumentBinding, account, accessRights, config) { _topicName = topicName; _subscriptionName = subscriptionName; _entityPath = SubscriptionClient.FormatSubscriptionPath(topicName, subscriptionName); }
public ServiceBusSessionsListener(string entityPath, ServiceBusTriggerExecutor triggerExecutor, ServiceBusOptions config, ServiceBusAccount serviceBusAccount, SessionProvider sessionProvider) { _entityPath = entityPath; _triggerExecutor = triggerExecutor; _cancellationTokenSource = new CancellationTokenSource(); _sessionProvider = sessionProvider; _serviceBusAccount = serviceBusAccount; _sessionProcessor = sessionProvider.CreateSessionProcessor(entityPath, _serviceBusAccount.ConnectionString); }
private static IAsyncObjectToTypeConverter <ServiceBusEntity> CreateConverter(ServiceBusAccount account, IBindableServiceBusPath queueOrTopicName, AccessRights accessRights) { return(new OutputConverter <string>(new StringToServiceBusEntityConverter(account, queueOrTopicName, accessRights))); }
public ServiceBusBinding(string parameterName, IArgumentBinding <ServiceBusEntity> argumentBinding, ServiceBusAccount account, IBindableServiceBusPath path, AccessRights accessRights) { _parameterName = parameterName; _argumentBinding = argumentBinding; _account = account; _namespaceName = ServiceBusClient.GetNamespaceName(account); _path = path; _accessRights = accessRights; _converter = CreateConverter(account, path, accessRights); }
public ServiceBusTriggerBinding(string parameterName, Type parameterType, ITriggerDataArgumentBinding <Message> argumentBinding, ServiceBusAccount account, ServiceBusConfiguration config, string topicName, string subscriptionName) : this(parameterName, parameterType, argumentBinding, account, config) { _topicName = topicName; _subscriptionName = subscriptionName; _entityPath = EntityNameHelper.FormatSubscriptionPath(topicName, subscriptionName); }
public StringToServiceBusEntityConverter(ServiceBusAccount account, IBindableServiceBusPath defaultPath, EntityType entityType) { _account = account; _defaultPath = defaultPath; _entityType = entityType; }
public ServiceBusBinding(string parameterName, IArgumentBinding <ServiceBusEntity> argumentBinding, ServiceBusAccount account, IBindableServiceBusPath path, ServiceBusAttribute attr, MessagingProvider messagingProvider) { _parameterName = parameterName; _argumentBinding = argumentBinding; _account = account; _path = path; _entityType = attr.EntityType; _messagingProvider = messagingProvider; _converter = new OutputConverter <string>(new StringToServiceBusEntityConverter(account, _path, _entityType, _messagingProvider)); }
public ServiceBusListener(string entityPath, ServiceBusTriggerExecutor triggerExecutor, ServiceBusConfiguration config, ServiceBusAccount serviceBusAccount) { _entityPath = entityPath; _triggerExecutor = triggerExecutor; _cancellationTokenSource = new CancellationTokenSource(); _messagingProvider = config.MessagingProvider; _serviceBusAccount = serviceBusAccount; _messageProcessor = config.MessagingProvider.CreateMessageProcessor(entityPath, _serviceBusAccount.ConnectionString); }