Azure队列触发器功能-本地集成

时间:2018-10-22 09:00:29

标签: azure azure-storage azure-functions azure-storage-queues azure-configuration

我正在使用Visual Studio创建一个简单的队列触发的Azure函数。我正在将其与我的存储帐户相关联,但是由于某种原因它无法正常工作。任何帮助表示赞赏。

这是我的代码:(由VS自动生成)

[FunctionName("QueueTest")]
public static void Run([QueueTrigger("my-queue", Connection = "")]string myQueueItem, TraceWriter log)        
{            
    log.Info($"C# Queue trigger function processed: {myQueueItem}");
}

这是我的local.settings.json

{
"IsEncrypted": false,  
  "Values":{

  "AzureWebJobsStorage":"DefaultEndpointsProtocol=https;AccountName=accountname;AccountKey=accountkey"
  }
}

3 个答案:

答案 0 :(得分:2)

所以我找出了问题所在。所有配置都很好。问题是,我的功能应用程序的Azure Function版本为1,但是由于某些原因(可能是由于最新的SDK / WebJobs),版本1无法正常工作。因此,我不得不使用AzureFunctionVersion 2创建另一个功能应用程序,并且一切正常。

答案 1 :(得分:1)

您需要将队列存储帐户的连接字符串添加到local.settings.json,然后提供连接字符串的名称作为QueueTrigger的Connection参数,例如在local.settings.json

"Values": {
    "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=accountname;AccountKey=accountkey",
    "MyStorage": "DefaultEndpointsProtocol=https;AccountName=accountname2;AccountKey=accountkey2;EndpointSuffix=core.windows.net"
}

以及您的代码

[QueueTrigger("my-queue", Connection = "MyStorage")]string myQueueItem

答案 2 :(得分:0)

默认情况下,队列触发器使用AzureWebJobsStorage帐户。您所需要做的就是从属性中删除Connection参数:

[FunctionName("QueueTest")]
public static void Run([QueueTrigger("my-queue")]string myQueueItem, TraceWriter log)        
{            
    log.Info($"C# Queue trigger function processed: {myQueueItem}");
}

理想情况下,如果您是Windows用户,请使用Azure Storage Emulator连接到本地队列。然后在您的local.settings.json文件中更改连接字符串:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "AzureWebJobsDashboard": "UseDevelopmentStorage=true",
  }
}

如果您不是Windows用户,则必须连接到Azure平台上托管的队列。为此,找到链接到您的功能的存储帐户,然后从其设置中复制连接字符串(存储帐户->访问密钥->连接字符串)