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); }
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); }