2017-02-02 33 views
6

我有一個route IoTHub指向一個觸發函數的EventHub。Azure物聯網集線器,EventHub和函數

我遇到問題,從事件對象獲取DeviceId和其他IoT Hub屬性,而沒有明確將這些屬性添加到有效內容中。

如果我設置了輸入型的string(或自定義類型):

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

我只得到了有效載荷沒有任何其他物聯網中心的屬性,如DEVICEID的correlationID的MessageId

我試圖將類型設置爲EventData代替:屬性和SystemProperties:

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

現在我可以通過兩個干將訪問物聯網中心的性能。例如,我可以像這樣訪問DeviceId iotMessage.SystemProperties["iothub-connection-device-id"]。但它不公開有效載荷。

那麼如何訪問物聯網集線器的屬性和負載?

+0

您應該將您對原始問題(您標記爲UPDATE)的答案張貼爲真實答案。可以回答他自己的問題。這樣,快速得到問題的答案會更容易。 (不管怎麼說,還是要謝謝你) –

回答

0

我錯過了EventData文檔中的一件事。它有一個名爲GetBytes()的方法,並將該主體作爲字節數組返回。獲得這兩個物聯網中樞性和身體的例子:

public static async void Run(EventData telemetryMessage, TraceWriter log) 
{ 
    var deviceId = GetDeviceId(telemetryMessage); 
    var payload = GetPayload(telemetryMessage.GetBytes()); 

    log.Info($"C# Event Hub trigger function processed a message. deviceId: { deviceId }, payload: { JsonConvert.SerializeObject(payload) }"); 
} 

private static Payload GetPayload(byte[] body) 
{ 
    var json = System.Text.Encoding.UTF8.GetString(body); 
    return JsonConvert.DeserializeObject<Payload>(json); 
} 

private static string GetDeviceId(EventData message) 
{ 
    return message.SystemProperties["iothub-connection-device-id"].ToString(); 
} 
1

如果您需要訪問除有效負載以外的詳細事件屬性,那麼這是推薦的方法。在您不需要訪問這些事件屬性的情況下,string等的簡單/默認綁定非常有用。我們的運行時在幕後爲您調用EventData.GetBytes()並將數據轉換爲您指定的輸入類型。

但我確實認爲我們可以對這些場景進行改進以促進這些場景。我們在我們的回購庫中記錄了一個錯誤here以跟蹤此事。

1

有一些upcoming updates,將簡單,就是根據這個:

加一等結合數據對許多重要 ServiceBus的支持和EventHub消息/事件屬性。對於EventHub:

  • PartitionContext
  • PartitionKey
  • 偏移
  • 的SequenceNumber
  • EnqueuedTimeUtc
  • 屬性
  • SystemProperties

對於ServiceBus:

  • DeliveryCount
  • DeadLetterSource
  • ExpiresAtUtc
  • EnqueuedTimeUtc
  • 的MessageId
  • 的ContentType
  • 的ReplyTo
  • 的SequenceNumber
  • 標籤
  • 的correlationID
  • 屬性

所以,你應該能夠綁定到這些特性以及有效載荷。