我開發了一個azure函數來處理消息進入IoTHub時的解壓縮。Azure功能:IoTHub作爲輸入和輸出
功能是連接到IoTHub內置的消息端點,因此它可以像一個EventHub作用。
我想要的功能是將解壓後的內容輸出回IoTHub,這樣我運行的流分析和其他工作就不必連接到不同的端點以繼續接收遙測。
似乎有文檔圍繞Azure的功能和掛鉤起來,以IoTHubs相當數量的,但還有一部分是從去年開始,我知道事情已經改變了不少。
這是我目前的連接字符串來讀取和寫入同一IoTHub:
Endpoint=sb://iothub-ns-34997-5db385cb1f.servicebus.windows.net/;SharedAccessKeyName=iothubowner;SharedAccessKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=;EntityPath=IoTHub
現在我已經設置了輸出去IoTHub終點,我得到一個錯誤
Exception while executing function: Functions.DecompressionJS. Microsoft.Azure.WebJobs.Host: Error while handling parameter _binder after function returned:. Microsoft.ServiceBus: Unauthorized access. 'Send' claim(s) are required to perform this operation. Resource: 'sb://iothub-ns-34997-5db385cb1f.servicebus.windows.net/iothub'. TrackingId:e85de1ed565243bcb30bc622a2cab252_G4, SystemTracker:gateway6, Timestamp:6/22/2017 9:20:16 PM.
所以我想有一些錯誤的連接字符串,所以我修改它包含/ iothub,例外告訴我使用的,因爲端點的其餘部分匹配當前的連接字符串。
一旦我更新了連接字符串,並重新運行我得到了一個不同異常的函數:
Exception while executing function: Functions.DecompressionJS. Microsoft.Azure.WebJobs.Host: Error while handling parameter _binder after function returned:. Microsoft.ServiceBus: Invalid EventHub address. It must be either of the following. Sender: <EventHubName>. Partition Sender: <EventHubName>/Partitions/<PartitionNumber>. Partition Receiver: <EventHubName>/ConsumerGroups/<ConsumerGroupName>/Partitions/<PartitionNumber>. TrackingId:ecb290822f494a86a61c21712656ea4c_G0, SystemTracker:gateway6, Timestamp:6/22/2017 8:44:14 PM.
所以在這一點上,我認爲這個IoTHub端點僅用於閱讀的消息,也沒有辦法將解壓縮的內容返回到IoTHub。
我希望有人能證明我錯了,幫我配置我的連接字符串,所以我可以有一個閉環,並檢索和發送消息,並從IoTHub沒有中介。
您不應該公開發布您的訪問密鑰... – Mikhail
感謝您的領導。我已經通過省略了一些內容修改了訪問密鑰,但是我編輯了共享訪問密鑰,因此它不再是實際的密鑰。 –
請注意,舊訪問密鑰仍位於[公共修訂歷史記錄](// stackoverflow.com/posts/44709647/revisions)中。 – halfer