Azure IoT 中心、EventHub 和函数

标签 azure azure-functions azure-eventhub azure-iot-hub

我有一个 IoTHub,其地址为 route指向触发函数的 EventHub。

我在从事件对象获取 DeviceId 和其他 IoT 中心属性时遇到问题,而没有将它们显式添加到负载中。

如果我将输入类型设置为字符串(或自定义类型):

public static void Run(string iotMessage, TraceWriter log) {
    log.Info($"C# Event Hub trigger function processed a message: {iotMessage}");
}

我仅获取有效负载,而没有任何其他 IoT 中心属性,例如 DeviceIdCorrelationIdMessageId

我尝试将类型设置为 EventData:

public static void Run(EventData iotMessage, TraceWriter log) {
    log.Info($"C# Event Hub trigger function processed a message: {JsonConvert.SerializeObject(iotMessage)}");
}

现在我可以通过两个 getter 访问 IoT 中心属性:Properties 和 SystemProperties。例如,我可以像这样 iotMessage.SystemProperties["iothub-connection-device-id"] 访问 DeviceId。但它不会暴露有效负载。

那么如何访问 IoT 中心属性和负载?

最佳答案

如果您除了负载之外还需要访问详细的事件属性,那么这是推荐的方法。在您不需要访问这些事件属性的情况下,string 等的简单/默认绑定(bind)非常有用。我们的运行时在幕后为您调用 EventData.GetBytes() 并将数据转换为您指定的输入类型。

不过,我确实认为我们可以做出改进来促进这些场景。我记录了一个错误 here在我们的存储库中跟踪这一点。

关于Azure IoT 中心、EventHub 和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42003600/

相关文章:

c# - 如何使用 Send Grid mvc azure 通过 List<string>() 发送电子邮件

node.js - Azure Functions 未执行任何操作就超时

azure - 限制Azure函数自动缩放

c# - VB.NET Azure Functions — Microsoft.CSharp 程序集有什么作用?

c# - Azure Web PubSub 和事件网格/事件中心之间有什么区别?

python - 如何将 tensorflow 模型部署到azure ml工作台

c# - 如何从 Azure 函数返回 JSON

azure - 使用 Reactive X 流处理来自事件中心的数据

apache-spark - Spark 结构化流可扩展性和重复问题

python - 如何在不提供变量的情况下通过 HTTP 触发 Azure 函数?