我有一个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/