Exemple #1
0
        public void GenerateServiceBusTriggerFunction()
        {
            ServiceBusBindingMetadata trigger = new ServiceBusBindingMetadata
            {
                Type             = BindingType.ServiceBusTrigger,
                TopicName        = "testTopic",
                SubscriptionName = "testSubscription",
                AccessRights     = AccessRights.Listen
            };
            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);
            ServiceBusTriggerAttribute attribute = parameter.GetCustomAttribute <ServiceBusTriggerAttribute>();

            Assert.Equal(null, attribute.QueueName);
            Assert.Equal("testTopic", attribute.TopicName);
            Assert.Equal("testSubscription", attribute.SubscriptionName);
            Assert.Equal(AccessRights.Listen, attribute.Access);
        }
        public ServiceBusBinding(ScriptHostConfiguration config, ServiceBusBindingMetadata metadata, FileAccess access) :
            base(config, metadata, access)
        {
            string queueOrTopicName = metadata.QueueName ?? metadata.TopicName;

            if (string.IsNullOrEmpty(queueOrTopicName))
            {
                throw new ArgumentException("A valid queue or topic name must be specified.");
            }

            QueueOrTopicName = queueOrTopicName;
            _queueOrTopicNameBindingTemplate = BindingTemplate.FromString(QueueOrTopicName);
        }
Exemple #3
0
        internal static Collection <FunctionBinding> GetBindings(ScriptHostConfiguration config, IEnumerable <BindingMetadata> bindingMetadatas, FileAccess fileAccess)
        {
            Collection <FunctionBinding> bindings = new Collection <FunctionBinding>();

            if (bindings != null)
            {
                foreach (var bindingMetadata in bindingMetadatas)
                {
                    BindingType type = bindingMetadata.Type;
                    string      name = bindingMetadata.Name;

                    switch (type)
                    {
                    case BindingType.Blob:
                    case BindingType.BlobTrigger:
                        BlobBindingMetadata blobBindingMetadata = (BlobBindingMetadata)bindingMetadata;
                        bindings.Add(new BlobBinding(config, name, blobBindingMetadata.Path, fileAccess, bindingMetadata.IsTrigger));
                        break;

                    case BindingType.Queue:
                    case BindingType.QueueTrigger:
                        QueueBindingMetadata queueBindingMetadata = (QueueBindingMetadata)bindingMetadata;
                        if (!queueBindingMetadata.IsTrigger &&
                            fileAccess != FileAccess.Write)
                        {
                            throw new InvalidOperationException("Queue binding can only be used for output.");
                        }
                        bindings.Add(new QueueBinding(config, name, queueBindingMetadata.QueueName, fileAccess, bindingMetadata.IsTrigger));
                        break;

                    case BindingType.ServiceBus:
                    case BindingType.ServiceBusTrigger:
                        ServiceBusBindingMetadata serviceBusBindingMetadata = (ServiceBusBindingMetadata)bindingMetadata;
                        if (!serviceBusBindingMetadata.IsTrigger &&
                            fileAccess != FileAccess.Write)
                        {
                            throw new InvalidOperationException("ServiceBus binding can only be used for output.");
                        }
                        string queueOrTopicName = serviceBusBindingMetadata.QueueName ?? serviceBusBindingMetadata.TopicName;
                        bindings.Add(new ServiceBusBinding(config, name, queueOrTopicName, fileAccess, bindingMetadata.IsTrigger));
                        break;

                    case BindingType.Table:
                        TableBindingMetadata tableBindingMetadata = (TableBindingMetadata)bindingMetadata;
                        TableQuery           tableQuery           = new TableQuery
                        {
                            TakeCount    = tableBindingMetadata.Take,
                            FilterString = tableBindingMetadata.Filter
                        };
                        bindings.Add(new TableBinding(config, name, tableBindingMetadata.TableName, tableBindingMetadata.PartitionKey, tableBindingMetadata.RowKey, fileAccess, tableQuery));
                        break;

                    case BindingType.Http:
                        HttpBindingMetadata httpBindingMetadata = (HttpBindingMetadata)bindingMetadata;
                        if (fileAccess != FileAccess.Write)
                        {
                            throw new InvalidOperationException("Http binding can only be used for output.");
                        }
                        name = name ?? "res";
                        bindings.Add(new HttpBinding(config, name, FileAccess.Write, bindingMetadata.IsTrigger));
                        break;
                    }
                }
            }

            return(bindings);
        }
Exemple #4
0
        internal static Collection <FunctionBinding> GetBindings(ScriptHostConfiguration config, IEnumerable <BindingMetadata> bindingMetadatas, FileAccess fileAccess)
        {
            Collection <FunctionBinding> bindings = new Collection <FunctionBinding>();

            if (bindings != null)
            {
                foreach (var bindingMetadata in bindingMetadatas)
                {
                    switch (bindingMetadata.Type)
                    {
                    case BindingType.Blob:
                    case BindingType.BlobTrigger:
                        BlobBindingMetadata blobBindingMetadata = (BlobBindingMetadata)bindingMetadata;
                        bindings.Add(new BlobBinding(config, blobBindingMetadata, fileAccess));
                        break;

                    case BindingType.EventHub:
                    case BindingType.EventHubTrigger:
                        EventHubBindingMetadata eventHubBindingMetadata = (EventHubBindingMetadata)bindingMetadata;
                        if (!eventHubBindingMetadata.IsTrigger &&
                            fileAccess != FileAccess.Write)
                        {
                            throw new InvalidOperationException("EventHub binding can only be used for output.");
                        }
                        bindings.Add(new EventHubBinding(config, eventHubBindingMetadata, fileAccess));
                        break;

                    case BindingType.Queue:
                    case BindingType.QueueTrigger:
                        QueueBindingMetadata queueBindingMetadata = (QueueBindingMetadata)bindingMetadata;
                        if (!queueBindingMetadata.IsTrigger &&
                            fileAccess != FileAccess.Write)
                        {
                            throw new InvalidOperationException("Queue binding can only be used for output.");
                        }
                        bindings.Add(new QueueBinding(config, queueBindingMetadata, fileAccess));
                        break;

                    case BindingType.ServiceBus:
                    case BindingType.ServiceBusTrigger:
                        ServiceBusBindingMetadata serviceBusBindingMetadata = (ServiceBusBindingMetadata)bindingMetadata;
                        if (!serviceBusBindingMetadata.IsTrigger &&
                            fileAccess != FileAccess.Write)
                        {
                            throw new InvalidOperationException("ServiceBus binding can only be used for output.");
                        }
                        bindings.Add(new ServiceBusBinding(config, serviceBusBindingMetadata, fileAccess));
                        break;

                    case BindingType.Table:
                        TableBindingMetadata tableBindingMetadata = (TableBindingMetadata)bindingMetadata;
                        bindings.Add(new TableBinding(config, tableBindingMetadata, fileAccess));
                        break;

                    case BindingType.Http:
                        if (fileAccess != FileAccess.Write)
                        {
                            throw new InvalidOperationException("Http binding can only be used for output.");
                        }
                        if (string.IsNullOrEmpty(bindingMetadata.Name))
                        {
                            // TODO: Why is this here?
                            bindingMetadata.Name = "res";
                        }
                        bindings.Add(new HttpBinding(config, bindingMetadata, FileAccess.Write));
                        break;

                    case BindingType.HttpTrigger:
                        bindings.Add(new HttpBinding(config, bindingMetadata, FileAccess.Read));
                        break;

                    case BindingType.EasyTable:
                        EasyTableBindingMetadata easyTableMetadata = (EasyTableBindingMetadata)bindingMetadata;
                        bindings.Add(new EasyTableBinding(config, easyTableMetadata, fileAccess));
                        break;

                    case BindingType.DocumentDB:
                        DocumentDBBindingMetadata docDBMetadata = (DocumentDBBindingMetadata)bindingMetadata;
                        bindings.Add(new DocumentDBBinding(config, docDBMetadata, fileAccess));
                        break;

                    case BindingType.NotificationHub:
                        NotificationHubBindingMetadata notificationHubMetadata = (NotificationHubBindingMetadata)bindingMetadata;
                        bindings.Add(new NotificationHubBinding(config, notificationHubMetadata, fileAccess));
                        break;

                    case BindingType.ApiHub:
                    case BindingType.ApiHubTrigger:
                        ApiHubBindingMetadata apiHubBindingMetadata = (ApiHubBindingMetadata)bindingMetadata;
                        apiHubBindingMetadata.Key = Guid.NewGuid().ToString();
                        bindings.Add(new ApiHubBinding(config, apiHubBindingMetadata, fileAccess));
                        break;
                    }
                }
            }

            return(bindings);
        }