Azure函数使用输入和输出绑定在本地开发

问题描述 投票:4回答:3

查看在Visual Studio 2017中开发Azure功能的示例,可以看到可以使用触发器设置新的功能模板。

因此,对于队列,模板将如下所示:

using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;

namespace FunctionApp1
{
    public static class Function1
    {
        [FunctionName("QueueTriggerCSharp")]        
        public static void Run([QueueTrigger("myqueue-items", Connection = "QueueStorage")]string myQueueItem, TraceWriter log)
        {
            log.Info($"C# Queue trigger function processed: {myQueueItem}");
        }
    }
} 

您是否能够在本地添加和运行其他输入和输出绑定,例如:

using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;

namespace FunctionApp1
{
    public static class Function1
    {
        [FunctionName("QueueTriggerCSharp")]        
        public static async Task Run([QueueTrigger("myqueue-items", Connection = "QueueStorage")]string myQueueItem, CloudTable inputTable, IAsyncCollector<string> outputEventHubMessages, TraceWriter log)
        {
            log.Info($"C# Queue trigger function processed: {myQueueItem}");

            TableQuery<TableEntity> query = new TableQuery<FailedEventEntity>().Where(
            TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "helloWorld"));

            List<TableEntity> entities = inputTable.ExecuteQuery(query).ToList();

            await outputEventHubMessages.AddAsync(myQueueItem);

        }
    }
} 

是否需要在local.settings.json中配置它们?

c# azure visual-studio-2017 azure-functions azure-webjobs
3个回答
3
投票

当然你是。您还需要使用属性来装饰它们:

[Table("table-name")] CloudTable inputTable, 
[EventHub("event-hub-name")] IAsyncCollector<string> outputEventHubMessages

本地环境的配置值确实取自local.settings.json,因此您需要在那里添加它们(连接字符串等)。


2
投票

For anyone looking for information about function binding attributes:

https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-class-library

And a completed example from my question:

Function1.cs

using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Azure.WebJobs.ServiceBus; // INCLUDE THIS FOR EVENT HUB ATTRIBUTE

namespace FunctionApp1
{
    public static class Function1
    {
        [FunctionName("QueueTriggerCSharp")]        
        public static async Task Run([QueueTrigger("myqueue-items", Connection = "QueueStorageConnectionString")]string myQueueItem, [Table("tableName", Connection = "StorageAccountConnectionString")]CloudTable inputTable, [EventHub("eventHubName", Connection = "EventHubConnectionString")]IAsyncCollector<string> outputEventHubMessages, TraceWriter log)
        {
            log.Info($"C# Queue trigger function processed: {myQueueItem}");

            TableQuery<TableEntity> query = new TableQuery<FailedEventEntity>().Where(
            TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "helloWorld"));

            List<TableEntity> entities = inputTable.ExecuteQuery(query).ToList();

            await outputEventHubMessages.AddAsync(myQueueItem);

        }
    }
} 

local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "your_storage_account_connection_string",
    "AzureWebJobsDashboard": "your_storage_account_connection_string",
    "QueueStorageConnectionString": "your_queue_storage_connection_string"
    "StorageAccountConnectionString": "your_storage_account_connection_string"
    "EventHubConnectionString": "your_event_hub_connection_string"
  }
}

0
投票

@Chris:这很奇怪,EventHubAttribute的“我的”版本没有Connection属性。我正在使用Microsoft.Azure.WebJobs.ServiceBus 2.0.0。你用的是什么版本?据我所知,最新的可用版本是2.0.0。

© www.soinside.com 2019 - 2024. All rights reserved.