public QueueBinding(ScriptHostConfiguration config, QueueBindingMetadata metadata, FileAccess access) : base(config, metadata, access) { if (string.IsNullOrEmpty(metadata.QueueName)) { throw new ArgumentException("The queue name cannot be null or empty."); } QueueName = metadata.QueueName; _queueNameBindingTemplate = BindingTemplate.FromString(QueueName); }
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); }
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); }
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); }