コード例 #1
0
            public override Collection <Attribute> GetAttributes()
            {
                Collection <Attribute> attributes = new Collection <Attribute>();

                string    queueName = Context.GetMetadataValue <string>("queueName");
                Attribute attribute = null;

                if (Context.IsTrigger)
                {
                    attribute = new QueueTriggerAttribute(queueName);
                }
                else
                {
                    attribute = new QueueAttribute(queueName);
                }
                attributes.Add(attribute);

                var    connectionProvider = (IConnectionProvider)attribute;
                string connection         = Context.GetMetadataValue <string>("connection");

                if (!string.IsNullOrEmpty(connection))
                {
                    connectionProvider.Connection = connection;
                }

                return(attributes);
            }
        public async Task <ITriggerBinding> TryCreateAsync(TriggerBindingProviderContext context)
        {
            ParameterInfo         parameter    = context.Parameter;
            QueueTriggerAttribute queueTrigger = parameter.GetCustomAttribute <QueueTriggerAttribute>(inherit: false);

            if (queueTrigger == null)
            {
                return(null);
            }

            string queueName = Resolve(queueTrigger.QueueName);

            queueName = NormalizeAndValidate(queueName);

            ITriggerDataArgumentBinding <IStorageQueueMessage> argumentBinding = _innerProvider.TryCreate(parameter);

            if (argumentBinding == null)
            {
                throw new InvalidOperationException(
                          "Can't bind QueueTrigger to type '" + parameter.ParameterType + "'.");
            }

            IStorageAccount account = await _accountProvider.GetStorageAccountAsync(context.CancellationToken);

            IStorageQueueClient client = account.CreateQueueClient();
            IStorageQueue       queue  = client.GetQueueReference(queueName);

            ITriggerBinding binding = new QueueTriggerBinding(parameter.Name, queue, argumentBinding,
                                                              _queueConfiguration, _backgroundExceptionDispatcher, _messageEnqueuedWatcherSetter,
                                                              _sharedContextProvider, _log);

            return(binding);
        }
コード例 #3
0
        public void GenerateQueueTriggerFunction()
        {
            QueueBindingMetadata trigger = new QueueBindingMetadata
            {
                Type      = BindingType.QueueTrigger,
                QueueName = "test"
            };
            MethodInfo method = GenerateMethod(trigger);

            VerifyCommonProperties(method);

            // verify trigger parameter
            ParameterInfo parameter = method.GetParameters()[0];

            Assert.Equal("input", parameter.Name);
            Assert.Equal(typeof(string), parameter.ParameterType);
            QueueTriggerAttribute attribute = parameter.GetCustomAttribute <QueueTriggerAttribute>();

            Assert.Equal("test", attribute.QueueName);
        }
コード例 #4
0
        public async Task <ITriggerBinding> TryCreateAsync(TriggerBindingProviderContext context)
        {
            ParameterInfo         parameter    = context.Parameter;
            QueueTriggerAttribute queueTrigger = parameter.GetCustomAttribute <QueueTriggerAttribute>(inherit: false);

            if (queueTrigger == null)
            {
                return(null);
            }

            string queueName = Resolve(queueTrigger.QueueName);

            queueName = NormalizeAndValidate(queueName);

            ITriggerDataArgumentBinding <IStorageQueueMessage> argumentBinding = InnerProvider.TryCreate(parameter);

            if (argumentBinding == null)
            {
                throw new InvalidOperationException(
                          "Can't bind QueueTrigger to type '" + parameter.ParameterType + "'.");
            }

            IStorageAccount account = await _accountProvider.GetStorageAccountAsync(context.Parameter, context.CancellationToken, _nameResolver);

            // requires storage account with queue support
            account.AssertTypeOneOf(StorageAccountType.GeneralPurpose);

            StorageClientFactoryContext clientFactoryContext = new StorageClientFactoryContext
            {
                Parameter = parameter
            };
            IStorageQueueClient client = account.CreateQueueClient(clientFactoryContext);
            IStorageQueue       queue  = client.GetQueueReference(queueName);

            ITriggerBinding binding = new QueueTriggerBinding(parameter.Name, queue, argumentBinding,
                                                              _queueConfiguration, _exceptionHandler, _messageEnqueuedWatcherSetter,
                                                              _sharedContextProvider, _trace);

            return(binding);
        }
コード例 #5
0
        public void GenerateQueueTriggerFunction()
        {
            BindingMetadata trigger = BindingMetadata.Create(new JObject
            {
                { "type", "QueueTrigger" },
                { "name", "input" },
                { "direction", "in" },
                { "queueName", "test" }
            });
            MethodInfo method = GenerateMethod(trigger);

            VerifyCommonProperties(method);

            // verify trigger parameter
            ParameterInfo parameter = method.GetParameters()[0];

            Assert.Equal("input", parameter.Name);
            Assert.Equal(typeof(string), parameter.ParameterType);
            QueueTriggerAttribute attribute = parameter.GetCustomAttribute <QueueTriggerAttribute>();

            Assert.Equal("test", attribute.QueueName);
        }