问题描述
我想开发一种天蓝色功能来处理来自IoT中心的D2C消息。以前,我开发了一个功能,直接在门户上进行编码,并且可以看到该功能为我使用开发的桌面应用程序发送的每条消息打印的日志。但是我需要实施更复杂的操作,因此我决定使用Visual Studio Code进行相同的操作。我为此安装了必要的扩展,并按照下面的步骤创建了一个新项目:
- 我选择了一个新文件夹
- 语言:C#
- 模板:IotHubTrigger
- 函数名称:MyFunctionName
- 命名空间:MyNamespace
- 创建新的本地应用设置文件
- 事件中心名称空间:立即跳过
- 将消息发送到的iot集线器端点的名称:消息/事件
- 我选择了Azure功能使用的存储帐户。
在.vscode/settings.json
文件中,我将"azureFunctions.projectRuntime"
的值从"~3"
更改为"~2"
,以避免在部署过程中出现此警告消息:
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消息时看不到任何日志。