我有一个IoTHub,它的route指向触发功能的EventHub。

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

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

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

我仅获得有效负载,而没有其他任何IoT中心属性,例如DeviceId,CorrelationId或MessageId。

我试图将类型设置为EventData:
public static void Run(EventData iotMessage, TraceWriter log) {
    log.Info($"C# Event Hub trigger function processed a message: {JsonConvert.SerializeObject(iotMessage)}");
}

现在,我可以通过两个getter访问IoT Hub属性: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/

10-11 10:23