IoT中心使用Visual Studio代码触发的Azure Function App问题

问题描述

我想开发一种天蓝色功能来处理来自IoT中心的D2C消息。以前,我开发了一个功能,直接在门户上进行编码,并且可以看到该功能为我使用开发的桌面应用程序发送的每条消息打印的日志。但是我需要实施更复杂的操作,因此我决定使用Visual Studio Code进行相同的操作。我为此安装了必要的扩展,并按照下面的步骤创建了一个新项目:

  • 我选择了一个文件
  • 语言:C#
  • 模板:IotHubTrigger
  • 函数名称:MyFunctionName
  • 命名空间:MyNamespace
  • 创建新的本地应用设置文件
  • 事件中心名称空间:立即跳过
  • 将消息发送到的iot集线器端点的名称:消息/事件
  • 我选择了Azure功能使用的存储帐户。

.vscode/settings.json文件中,我将"azureFunctions.projectRuntime"的值从"~3"更改为"~2",以避免在部署过程中出现此警告消息:

Visual Studio Code warning

这是创建的文件

using IoTHubTrigger = Microsoft.Azure.WebJobs.EventHubTriggerAttribute;

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Azure.EventHubs;
using System.Text;
using System.Net.Http;
using Microsoft.Extensions.Logging;

namespace MyNamespace
{
    public static class MyFunctionName
    {
        private static HttpClient client = new HttpClient();

        [FunctionName("MyFunctionName")]
        public static void Run([IoTHubTrigger("messages/events",Connection = "")]EventData message,ILogger log)
        {
            log.Log@R_976_4045@ion($"C# IoT Hub trigger function processed a message: {Encoding.UTF8.GetString(message.Body.Array)}");
        }
    }
}

我认为我缺少连接字符串。我可以在local.settings.json文件中找到AzureWebJobsstorage值(已删除一些值):

{
    "IsEncrypted": false,"Values": {
        "AzureWebJobsstorage": "DefaultEndpointsProtocol=https;AccountName={xxxxx};AccountKey={yyyyy};EndpointSuffix=core.windows.net","FUNCTIONS_WORKER_RUNTIME": "dotnet"
    }
}

我认为我必须用Connection值填充AzureWebJobsstorage参数:

public static void Run([IoTHubTrigger("messages/events",Connection = "AzureWebJobsstorage")]EventData message,ILogger log)

但是在Azure上运行时,我需要在哪里定义此AzureWebJobsstorage值以使用它?如果部署此功能,则在发送D2C消息时看不到任何日志。

解决方法

如果我正确理解您的问题,那么您想知道在Azure中运行函数时在哪里定义配置值?您可以通过以下方法来做到这一点:转到Azure门户,导航至“功能”,然后单击菜单中的“配置”(位于“设置”下)。 Azure Portal blade

从那里,您可以输入名称为AzureWebJobsStorage的新应用程序设置以及存储帐户的连接字符串。否则,您的功能肯定不会运行。

注意: 感谢您如此彻底的提问!但是,请注意,我想知道为什么更改azureFunctions.projectRuntime是必要的吗?