private FunctionDescriptor CreateFunctionDescriptor(MethodInfo method, string triggerParameterName,
                                                            ITriggerBinding triggerBinding, IReadOnlyDictionary <string, IBinding> nonTriggerBindings)
        {
            var descr = FromMethod(method, this._activator, _nameResolver, _defaultTimeout);

            List <ParameterDescriptor> parameters = new List <ParameterDescriptor>();

            foreach (ParameterInfo parameter in method.GetParameters())
            {
                string name = parameter.Name;

                if (name == triggerParameterName)
                {
                    parameters.Add(triggerBinding.ToParameterDescriptor());
                }
                else
                {
                    parameters.Add(nonTriggerBindings[name].ToParameterDescriptor());
                }
            }

            descr.Parameters = parameters;
            descr.TriggerParameterDescriptor = parameters.OfType <TriggerParameterDescriptor>().FirstOrDefault();

            return(descr);
        }
Пример #2
0
        private static FunctionDescriptor CreateFunctionDescriptor(MethodInfo method, string triggerParameterName,
                                                                   ITriggerBinding triggerBinding, IReadOnlyDictionary <string, IBinding> nonTriggerBindings)
        {
            List <ParameterDescriptor> parameters = new List <ParameterDescriptor>();

            foreach (ParameterInfo parameter in method.GetParameters())
            {
                string name = parameter.Name;

                if (name == triggerParameterName)
                {
                    parameters.Add(triggerBinding.ToParameterDescriptor());
                }
                else
                {
                    parameters.Add(nonTriggerBindings[name].ToParameterDescriptor());
                }
            }

            // Determine the TraceLevel for this function (affecting both Console as well as Dashboard logging)
            TraceLevelAttribute traceAttribute = TypeUtility.GetHierarchicalAttributeOrNull <TraceLevelAttribute>(method);

            return(new FunctionDescriptor
            {
                Id = method.GetFullName(),
                Method = method,
                FullName = method.GetFullName(),
                ShortName = method.GetShortName(),
                Parameters = parameters,
                TraceLevel = traceAttribute?.Level ?? TraceLevel.Verbose,
                TriggerParameterDescriptor = parameters.OfType <TriggerParameterDescriptor>().FirstOrDefault(),
                TimeoutAttribute = TypeUtility.GetHierarchicalAttributeOrNull <TimeoutAttribute>(method),
                SingletonAttributes = method.GetCustomAttributes <SingletonAttribute>()
            });
        }
 public ListenerFactory(FunctionDescriptor descriptor, ITriggeredFunctionExecutor executor, ITriggerBinding binding, SharedQueueHandler sharedQueue)
 {
     _descriptor  = descriptor;
     _executor    = executor;
     _binding     = binding;
     _sharedQueue = sharedQueue;
 }
Пример #4
0
        private static FunctionDescriptor CreateFunctionDescriptor(MethodInfo method, string triggerParameterName,
                                                                   ITriggerBinding triggerBinding, IReadOnlyDictionary <string, IBinding> nonTriggerBindings)
        {
            List <ParameterDescriptor> parameters = new List <ParameterDescriptor>();

            foreach (ParameterInfo parameter in method.GetParameters())
            {
                string name = parameter.Name;

                if (name == triggerParameterName)
                {
                    parameters.Add(triggerBinding.ToParameterDescriptor());
                }
                else
                {
                    parameters.Add(nonTriggerBindings[name].ToParameterDescriptor());
                }
            }

            return(new FunctionDescriptor
            {
                Id = method.GetFullName(),
                Method = method,
                FullName = method.GetFullName(),
                ShortName = method.GetShortName(),
                Parameters = parameters
            });
        }
Пример #5
0
 public TriggeredFunctionBinding(string triggerParameterName, ITriggerBinding triggerBinding,
                                 IReadOnlyDictionary <string, IBinding> nonTriggerBindings)
 {
     _triggerParameterName = triggerParameterName;
     _triggerBinding       = triggerBinding;
     _nonTriggerBindings   = nonTriggerBindings;
 }
        public Task <ITriggerBinding> TryCreateAsync(TriggerBindingProviderContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            ParameterInfo            parameter = context.Parameter;
            EventHubTriggerAttribute attribute = parameter.GetCustomAttribute <EventHubTriggerAttribute>(inherit: false);

            if (attribute == null)
            {
                return(Task.FromResult <ITriggerBinding>(null));
            }

            string eventHubName      = attribute.EventHubName;
            string resolvedName      = _nameResolver.ResolveWholeString(eventHubName);
            var    eventHostListener = _eventHubConfig.GetEventProcessorHost(resolvedName);

            var options = _eventHubConfig.GetOptions();
            var hooks   = new EventHubTriggerBindingStrategy();

            Func <ListenerFactoryContext, bool, Task <IListener> > createListener =
                (factoryContext, singleDispatch) =>
            {
                IListener listener = new EventHubListener(factoryContext.Executor, eventHostListener, options, singleDispatch);
                return(Task.FromResult(listener));
            };

            ITriggerBinding binding = BindingFactory.GetTriggerBinding <EventData, EventHubTriggerInput>(hooks, parameter, _converterManager, createListener);

            return(Task.FromResult <ITriggerBinding>(binding));
        }
        public async Task ValidParameters_Succeed(ParameterInfo parameter)
        {
            CosmosDBTriggerAttributeBindingProvider provider = new CosmosDBTriggerAttributeBindingProvider("AccountEndpoint=https://someEndpoint;AccountKey=someKey;", string.Empty);

            ITriggerBinding binding = await provider.TryCreateAsync(new TriggerBindingProviderContext(parameter, CancellationToken.None));

            Assert.Equal(binding.TriggerValueType, typeof(IReadOnlyList <Document>));
        }
        public ServiceBusTriggerBindingIntegrationTests()
        {
            IQueueTriggerArgumentBindingProvider provider = new UserTypeArgumentBindingProvider();
            ParameterInfo pi = new StubParameterInfo("parameterName", typeof(UserDataType));
            var           argumentBinding = provider.TryCreate(pi);

            _binding = new ServiceBusTriggerBinding("parameterName", typeof(UserDataType), argumentBinding, null, "queueName", AccessRights.Manage);
        }
        public ServiceBusTriggerBindingIntegrationTests()
        {
            IQueueTriggerArgumentBindingProvider provider = new UserTypeArgumentBindingProvider();
            ParameterInfo pi = new StubParameterInfo("parameterName", typeof(UserDataType));
            var           argumentBinding = provider.TryCreate(pi);

            _queueBinding = new ServiceBusTriggerBinding("parameterName", typeof(UserDataType), argumentBinding, null, AccessRights.Manage, new ServiceBusConfiguration(), "queueName");
            _topicBinding = new ServiceBusTriggerBinding("parameterName", typeof(UserDataType), argumentBinding, null, AccessRights.Manage, new ServiceBusConfiguration(), "subscriptionName", "topicName");
        }
Пример #10
0
 public TriggeredFunctionBinding(FunctionDescriptor descriptor, string triggerParameterName, ITriggerBinding triggerBinding,
                                 IReadOnlyDictionary <string, IBinding> nonTriggerBindings, SingletonManager singletonManager)
 {
     _descriptor           = descriptor;
     _triggerParameterName = triggerParameterName;
     _triggerBinding       = triggerBinding;
     _nonTriggerBindings   = nonTriggerBindings;
     _singletonManager     = singletonManager;
 }
Пример #11
0
        public async Task TryCreateAsync_AccountOverride_OverrideIsApplied()
        {
            ParameterInfo parameter = GetType().GetMethod("TestJob_AccountOverride").GetParameters()[0];
            TriggerBindingProviderContext context = new TriggerBindingProviderContext(parameter, CancellationToken.None);

            ITriggerBinding binding = await _provider.TryCreateAsync(context);

            Assert.NotNull(binding);
        }
Пример #12
0
        public async Task TryCreateAsync_DefaultAccount()
        {
            ParameterInfo parameter = GetType().GetMethod("TestJob", BindingFlags.NonPublic | BindingFlags.Static).GetParameters()[0];
            TriggerBindingProviderContext context = new TriggerBindingProviderContext(parameter, CancellationToken.None);

            ITriggerBinding binding = await _provider.TryCreateAsync(context);

            Assert.NotNull(binding);
        }
Пример #13
0
        private static FunctionDefinition CreateTriggeredFunctionDefinition(ITriggerBinding triggerBinding, string parameterName, IFunctionExecutor executor,
                                                                            FunctionDescriptor descriptor, IReadOnlyDictionary <string, IBinding> nonTriggerBindings, IFunctionInvoker invoker, SingletonManager singletonManager)
        {
            Type               triggerValueType = triggerBinding.TriggerValueType;
            MethodInfo         createTriggeredFunctionDefinitionMethodInfo = typeof(FunctionIndexer).GetMethod("CreateTriggeredFunctionDefinitionImpl", BindingFlags.Static | BindingFlags.NonPublic).MakeGenericMethod(triggerValueType);
            FunctionDefinition functionDefinition = (FunctionDefinition)createTriggeredFunctionDefinitionMethodInfo.Invoke(null, new object[] { triggerBinding, parameterName, executor, descriptor, nonTriggerBindings, invoker, singletonManager });

            return(functionDefinition);
        }
        public Task <ITriggerBinding> TryCreateAsync(TriggerBindingProviderContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            ParameterInfo            parameter = context.Parameter;
            EventHubTriggerAttribute attribute = parameter.GetCustomAttribute <EventHubTriggerAttribute>(inherit: false);

            if (attribute == null)
            {
                return(Task.FromResult <ITriggerBinding>(null));
            }

            string resolvedEventHubName = _nameResolver.ResolveWholeString(attribute.EventHubName);

            string consumerGroup         = attribute.ConsumerGroup ?? EventHubConsumerClient.DefaultConsumerGroupName;
            string resolvedConsumerGroup = _nameResolver.ResolveWholeString(consumerGroup);

            if (!string.IsNullOrWhiteSpace(attribute.Connection))
            {
                var connection       = _nameResolver.ResolveWholeString(attribute.Connection);
                var connectionString = _config.GetConnectionStringOrSetting(connection);
                _options.Value.AddReceiver(resolvedEventHubName, connectionString);
            }

            var eventHostListener = _options.Value.GetEventProcessorHost(resolvedEventHubName, resolvedConsumerGroup);
            var checkpointStoreConnectionString = _options.Value.GetCheckpointStoreConnectionString(_config, resolvedEventHubName);

            Func <ListenerFactoryContext, bool, Task <IListener> > createListener =
                (factoryContext, singleDispatch) =>
            {
                var checkpointStore = new BlobsCheckpointStore(
                    new BlobContainerClient(checkpointStoreConnectionString, _options.Value.LeaseContainerName),
                    _options.Value.EventProcessorOptions.RetryOptions.ToRetryPolicy(),
                    factoryContext.Descriptor.Id,
                    _logger);

                IListener listener = new EventHubListener(
                    factoryContext.Descriptor.Id,
                    factoryContext.Executor,
                    eventHostListener,
                    singleDispatch,
                    () => _options.Value.GetEventHubConsumerClient(resolvedEventHubName, consumerGroup),
                    checkpointStore,
                    _options.Value,
                    _logger);
                return(Task.FromResult(listener));
            };

#pragma warning disable 618
            ITriggerBinding binding = BindingFactory.GetTriggerBinding(new EventHubTriggerBindingStrategy(), parameter, _converterManager, createListener);
#pragma warning restore 618
            return(Task.FromResult(binding));
        }
Пример #15
0
        public Task <ITriggerBinding> TryCreateAsync(TriggerBindingProviderContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            ParameterInfo            parameter = context.Parameter;
            EventHubTriggerAttribute attribute = parameter.GetCustomAttribute <EventHubTriggerAttribute>(inherit: false);

            if (attribute == null)
            {
                return(Task.FromResult <ITriggerBinding>(null));
            }

            string resolvedEventHubName = _nameResolver.ResolveWholeString(attribute.EventHubName);

            string consumerGroup         = attribute.ConsumerGroup ?? PartitionReceiver.DefaultConsumerGroupName;
            string resolvedConsumerGroup = _nameResolver.ResolveWholeString(consumerGroup);

            string connectionString = null;

            if (!string.IsNullOrWhiteSpace(attribute.Connection))
            {
                attribute.Connection = _nameResolver.ResolveWholeString(attribute.Connection);
                connectionString     = _config.GetConnectionStringOrSetting(attribute.Connection);
                _options.Value.AddReceiver(resolvedEventHubName, connectionString);
            }

            var eventHostListener = _options.Value.GetEventProcessorHost(_config, resolvedEventHubName, resolvedConsumerGroup);

            string storageConnectionString = _config.GetWebJobsConnectionString(ConnectionStringNames.Storage);

            Func <ListenerFactoryContext, bool, Task <IListener> > createListener =
                (factoryContext, singleDispatch) =>
            {
                IListener listener = new EventHubListener(
                    factoryContext.Descriptor.Id,
                    resolvedEventHubName,
                    resolvedConsumerGroup,
                    connectionString,
                    storageConnectionString,
                    factoryContext.Executor,
                    eventHostListener,
                    singleDispatch,
                    _options.Value,
                    _logger);
                return(Task.FromResult(listener));
            };

            ITriggerBinding binding = BindingFactory.GetTriggerBinding(new EventHubTriggerBindingStrategy(), parameter, _converterManager, createListener);

            return(Task.FromResult <ITriggerBinding>(binding));
        }
Пример #16
0
        private static FunctionDefinition CreateTriggeredFunctionDefinitionImpl <TTriggerValue>(
            ITriggerBinding triggerBinding, string parameterName, IFunctionExecutor executor, FunctionDescriptor descriptor,
            IReadOnlyDictionary <string, IBinding> nonTriggerBindings, IFunctionInvoker invoker, SingletonManager singletonManager)
        {
            ITriggeredFunctionBinding <TTriggerValue>         functionBinding = new TriggeredFunctionBinding <TTriggerValue>(descriptor, parameterName, triggerBinding, nonTriggerBindings, singletonManager);
            ITriggeredFunctionInstanceFactory <TTriggerValue> instanceFactory = new TriggeredFunctionInstanceFactory <TTriggerValue>(functionBinding, invoker, descriptor);
            ITriggeredFunctionExecutor triggerExecutor = new TriggeredFunctionExecutor <TTriggerValue>(descriptor, executor, instanceFactory);
            IListenerFactory           listenerFactory = new ListenerFactory(descriptor, triggerExecutor, triggerBinding);

            return(new FunctionDefinition(descriptor, instanceFactory, listenerFactory));
        }
        public ServiceBusTriggerBindingIntegrationTests()
        {
            IQueueTriggerArgumentBindingProvider provider = new UserTypeArgumentBindingProvider();
            ParameterInfo pi = new StubParameterInfo("parameterName", typeof(UserDataType));
            var           argumentBinding   = provider.TryCreate(pi);
            var           options           = new ServiceBusOptions();
            var           messagingProvider = new MessagingProvider(new OptionsWrapper <ServiceBusOptions>(options));

            _queueBinding = new ServiceBusTriggerBinding("parameterName", typeof(UserDataType), argumentBinding, null, options, messagingProvider, "queueName");
            _topicBinding = new ServiceBusTriggerBinding("parameterName", typeof(UserDataType), argumentBinding, null, options, messagingProvider, "subscriptionName", "topicName");
        }
            public Task <ITriggerBinding> TryCreateAsync(TriggerBindingProviderContext context)
            {
                TestTriggerAttribute attribute = context.Parameter.GetCustomAttributes <TestTriggerAttribute>().SingleOrDefault();
                ITriggerBinding      binding   = null;

                if (attribute != null)
                {
                    binding = new TestTriggerBinding();
                }

                return(Task.FromResult(binding));
            }
        public async Task TryCreateAsync_DefaultAccount()
        {
            _mockMessagingProvider.Setup(p => p.CreateNamespaceManager(null)).Returns <NamespaceManager>(null);
            _mockMessagingProvider.Setup(p => p.CreateMessagingFactory("test", null)).Returns <MessagingFactory>(null);

            ParameterInfo parameter = GetType().GetMethod("TestJob").GetParameters()[0];
            TriggerBindingProviderContext context = new TriggerBindingProviderContext(parameter, CancellationToken.None);

            ITriggerBinding binding = await _provider.TryCreateAsync(context);

            _mockMessagingProvider.VerifyAll();
        }
        public Task <ITriggerBinding> TryCreateAsync(TriggerBindingProviderContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(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;
            EntityType entityType;

            if (attribute.QueueName != null)
            {
                queueName  = Resolve(attribute.QueueName);
                entityPath = queueName;
                entityType = EntityType.Queue;
            }
            else
            {
                topicName        = Resolve(attribute.TopicName);
                subscriptionName = Resolve(attribute.SubscriptionName);
                entityPath       = EntityNameHelper.FormatSubscriptionPath(topicName, subscriptionName);
                entityType       = EntityType.Topic;
            }

            attribute.Connection = Resolve(attribute.Connection);
            ServiceBusAccount account = new ServiceBusAccount(_options, _configuration, attribute);

            Func <ListenerFactoryContext, bool, Task <IListener> > createListener =
                (factoryContext, singleDispatch) =>
            {
                IListener listener = new ServiceBusListener(factoryContext.Descriptor.Id, entityType, entityPath, attribute.IsSessionsEnabled, factoryContext.Executor, _options, account, _messagingProvider, _loggerFactory, singleDispatch);
                return(Task.FromResult(listener));
            };

#pragma warning disable 618
            ITriggerBinding binding = BindingFactory.GetTriggerBinding(new ServiceBusTriggerBindingStrategy(), parameter, _converterManager, createListener);
#pragma warning restore 618

            return(Task.FromResult <ITriggerBinding>(binding));
        }
        public async Task <ITriggerBinding> TryCreateAsync(TriggerBindingProviderContext context)
        {
            foreach (ITriggerBindingProvider provider in _providers)
            {
                ITriggerBinding binding = await provider.TryCreateAsync(context);

                if (binding != null)
                {
                    return(binding);
                }
            }

            return(null);
        }
Пример #22
0
        public QueueTriggerBindingIntegrationTests()
        {
            IQueueTriggerArgumentBindingProvider provider = new UserTypeArgumentBindingProvider();
            ParameterInfo        pi = new StubParameterInfo("parameterName", typeof(UserDataType));
            var                  argumentBinding = provider.TryCreate(pi);
            Mock <IStorageQueue> queueMock       = new Mock <IStorageQueue>(MockBehavior.Strict);

            queueMock.Setup(q => q.Name).Returns("queueName");
            IStorageQueue queue = queueMock.Object;

            _binding = new QueueTriggerBinding("parameterName", queue, argumentBinding,
                                               new Mock <IQueueConfiguration>(MockBehavior.Strict).Object, BackgroundExceptionDispatcher.Instance,
                                               new Mock <IContextSetter <IMessageEnqueuedWatcher> >(MockBehavior.Strict).Object,
                                               new SharedContextProvider(), TextWriter.Null);
        }
        public async Task <ITriggerBinding> TryCreateAsync(TriggerBindingProviderContext context)
        {
            ParameterInfo parameter = context.Parameter;

            GraphWebhookTriggerAttribute attribute = parameter.GetCustomAttribute <GraphWebhookTriggerAttribute>(inherit: false);

            ITriggerBinding binding = null;

            if (attribute != null)
            {
                binding = new MyTriggerBinding(this, attribute, parameter);
            }

            return(binding);
        }
        public Task <ITriggerBinding> TryCreateAsync(TriggerBindingProviderContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            ParameterInfo parameter = context.Parameter;
            var           attribute = TypeUtility.GetResolvedAttribute <ServiceBusTriggerAttribute>(parameter);

            if (attribute == null)
            {
                return(Task.FromResult <ITriggerBinding>(null));
            }

            attribute.Connection = _nameResolver.ResolveWholeString(attribute.Connection);
            string entityPath;
            ServiceBusEntityType serviceBusEntityType;

            if (attribute.QueueName != null)
            {
                var queueName = _nameResolver.ResolveWholeString(attribute.QueueName);
                entityPath           = queueName;
                serviceBusEntityType = ServiceBusEntityType.Queue;
            }
            else
            {
                var topicName        = _nameResolver.ResolveWholeString(attribute.TopicName);
                var subscriptionName = _nameResolver.ResolveWholeString(attribute.SubscriptionName);
                entityPath           = EntityNameFormatter.FormatSubscriptionPath(topicName, subscriptionName);
                serviceBusEntityType = ServiceBusEntityType.Topic;
            }

            Func <ListenerFactoryContext, bool, Task <IListener> > createListener =
                (factoryContext, singleDispatch) =>
            {
                var       autoCompleteMessagesOptionEvaluatedValue = GetAutoCompleteMessagesOptionToUse(attribute, factoryContext.Descriptor.ShortName);
                IListener listener = new ServiceBusListener(factoryContext.Descriptor.Id, serviceBusEntityType, entityPath, attribute.IsSessionsEnabled, autoCompleteMessagesOptionEvaluatedValue, factoryContext.Executor, _options, attribute.Connection, _messagingProvider, _loggerFactory, singleDispatch, _clientFactory, _concurrencyManager);

                return(Task.FromResult(listener));
            };

#pragma warning disable 618
            ITriggerBinding binding = BindingFactory.GetTriggerBinding(new ServiceBusTriggerBindingStrategy(), parameter, _converterManager, createListener);
#pragma warning restore 618

            return(Task.FromResult <ITriggerBinding>(binding));
        }
Пример #25
0
        public QueueTriggerBindingIntegrationTests()
        {
            IQueueTriggerArgumentBindingProvider provider = new UserTypeArgumentBindingProvider();
            ParameterInfo        pi = new StubParameterInfo("parameterName", typeof(UserDataType));
            var                  argumentBinding = provider.TryCreate(pi);
            Mock <IStorageQueue> queueMock       = new Mock <IStorageQueue>(MockBehavior.Strict);

            queueMock.Setup(q => q.Name).Returns("queueName");
            IStorageQueue            queue            = queueMock.Object;
            IWebJobsExceptionHandler exceptionHandler = new WebJobsExceptionHandler();

            _binding = new QueueTriggerBinding("parameterName", queue, argumentBinding,
                                               new Mock <IQueueConfiguration>(MockBehavior.Strict).Object, exceptionHandler,
                                               new Mock <IContextSetter <IMessageEnqueuedWatcher> >(MockBehavior.Strict).Object,
                                               new SharedContextProvider(), new TestTraceWriter(TraceLevel.Verbose), null);
        }
        public Task <ITriggerBinding> TryCreateAsync(TriggerBindingProviderContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            ParameterInfo            parameter = context.Parameter;
            EventHubTriggerAttribute attribute = parameter.GetCustomAttribute <EventHubTriggerAttribute>(inherit: false);

            if (attribute == null)
            {
                return(Task.FromResult <ITriggerBinding>(null));
            }

            Func <ListenerFactoryContext, bool, Task <IListener> > createListener =
                (factoryContext, singleDispatch) =>
            {
                var options = _options.Value;
                if (singleDispatch && !options.IsSingleDispatchEnabled)
                {
                    throw new NotSupportedException("Binding to individual events is not supported. Please use batch processing by binding to an array instead.");
                }

                var checkpointStore = new BlobsCheckpointStore(
                    _clientFactory.GetCheckpointStoreClient(),
                    options.EventProcessorOptions.RetryOptions.ToRetryPolicy(),
                    factoryContext.Descriptor.Id,
                    _logger);

                IListener listener = new EventHubListener(
                    factoryContext.Descriptor.Id,
                    factoryContext.Executor,
                    _clientFactory.GetEventProcessorHost(attribute.EventHubName, attribute.Connection, attribute.ConsumerGroup),
                    singleDispatch,
                    _clientFactory.GetEventHubConsumerClient(attribute.EventHubName, attribute.Connection, attribute.ConsumerGroup),
                    checkpointStore,
                    options,
                    _logger);
                return(Task.FromResult(listener));
            };

#pragma warning disable 618
            ITriggerBinding binding = BindingFactory.GetTriggerBinding(new EventHubTriggerBindingStrategy(), parameter, _converterManager, createListener);
#pragma warning restore 618
            return(Task.FromResult(binding));
        }
Пример #27
0
        public QueueTriggerBindingIntegrationTests()
        {
            IQueueTriggerArgumentBindingProvider provider = new UserTypeArgumentBindingProvider();
            ParameterInfo pi = new StubParameterInfo("parameterName", typeof(UserDataType));
            var           argumentBinding = provider.TryCreate(pi);

            var        fakeAccount = new FakeStorage.FakeAccount();
            CloudQueue queue       = fakeAccount.CreateCloudQueueClient().GetQueueReference("queueName");

            IWebJobsExceptionHandler exceptionHandler = new WebJobsExceptionHandler(new Mock <IHost>().Object);
            var enqueueWatcher = new Host.Queues.Listeners.SharedQueueWatcher();

            _binding = new QueueTriggerBinding("parameterName", queue, argumentBinding,
                                               new QueuesOptions(), exceptionHandler,
                                               enqueueWatcher,
                                               null, null);
        }
Пример #28
0
        public QueueTriggerBindingIntegrationTests(AzuriteFixture azuriteFixture)
        {
            IQueueTriggerArgumentBindingProvider provider = new UserTypeArgumentBindingProvider();
            ParameterInfo pi = new StubParameterInfo("parameterName", typeof(UserDataType));
            var           argumentBinding = provider.TryCreate(pi);

            var fakeAccount = azuriteFixture.GetAccount();
            QueueServiceClient queueServiceClient = fakeAccount.CreateQueueServiceClient();
            QueueClient        queue = queueServiceClient.GetQueueClient("queueName-queuetriggerbindingintegrationtests");

            IWebJobsExceptionHandler exceptionHandler = new WebJobsExceptionHandler(new Mock <IHost>().Object);
            var enqueueWatcher = new Host.Queues.Listeners.SharedQueueWatcher();

            _binding = new QueueTriggerBinding("parameterName", queueServiceClient, queue, argumentBinding,
                                               new QueuesOptions(), exceptionHandler,
                                               enqueueWatcher,
                                               null, null);
        }
Пример #29
0
        public void SetUp()
        {
            _invariantCultureFixture = new InvariantCultureFixture();
            IQueueTriggerArgumentBindingProvider provider = new UserTypeArgumentBindingProvider();
            ParameterInfo pi = new StubParameterInfo("parameterName", typeof(UserDataType));
            var           argumentBinding = provider.TryCreate(pi);

            QueueServiceClient queueServiceClient = AzuriteNUnitFixture.Instance.GetQueueServiceClient();
            QueueClient        queue = queueServiceClient.GetQueueClient("queueName-queuetriggerbindingintegrationtests");

            IWebJobsExceptionHandler exceptionHandler = new WebJobsExceptionHandler(new Mock <IHost>().Object);
            var enqueueWatcher = new SharedQueueWatcher();

            _binding = new QueueTriggerBinding("parameterName", queueServiceClient, queue, argumentBinding,
                                               new QueuesOptions(), exceptionHandler,
                                               enqueueWatcher,
                                               null, null);
        }
        public Task <ITriggerBinding> TryCreateAsync(TriggerBindingProviderContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            ParameterInfo            parameter = context.Parameter;
            EventHubTriggerAttribute attribute = parameter.GetCustomAttribute <EventHubTriggerAttribute>(inherit: false);

            if (attribute == null)
            {
                return(Task.FromResult <ITriggerBinding>(null));
            }

            Func <ListenerFactoryContext, bool, Task <IListener> > createListener =
                (factoryContext, singleDispatch) =>
            {
                var options         = _options.Value;
                var checkpointStore = new BlobCheckpointStoreInternal(
                    _clientFactory.GetCheckpointStoreClient(),
                    factoryContext.Descriptor.Id,
                    _loggerFactory.CreateLogger <BlobCheckpointStoreInternal>());

                IListener listener = new EventHubListener(
                    factoryContext.Descriptor.Id,
                    factoryContext.Executor,
                    _clientFactory.GetEventProcessorHost(attribute.EventHubName, attribute.Connection, attribute.ConsumerGroup, singleDispatch),
                    singleDispatch,
                    _clientFactory.GetEventHubConsumerClient(attribute.EventHubName, attribute.Connection, attribute.ConsumerGroup),
                    checkpointStore,
                    options,
                    _loggerFactory);
                return(Task.FromResult(listener));
            };

#pragma warning disable 618
            ITriggerBinding binding = BindingFactory.GetTriggerBinding(new EventHubTriggerBindingStrategy(), parameter, _converterManager, createListener);
#pragma warning restore 618
            ITriggerBinding eventHubTriggerBindingWrapper = new EventHubTriggerBindingWrapper(binding);
            return(Task.FromResult(eventHubTriggerBindingWrapper));
        }