2017-08-27 67 views
0

我正在使用azure sdk和其他客戶端將事件發送到IoT中心。在主事件消息中向IoT Hub添加額外屬性時消息負載發生變化

我不得不使用物聯網集線器路由功能,因此我加入除了屬性主要有效載荷發送到IotHub

案例1日前:發送數據使用Azure的SDK

事件模型

RealTimeMachineData realTimeData = new RealTimeMachineData(); 
realTimeData.Date = DateTime.UtcNow;   
realTimeData.MachineCode = "M1"; 

發送數據到物聯網集線器的SDK代碼 enter image description here

當我在Service bus ex中看到此消息時plorer我這個樣子

{ 
    "MachineCode": "M1", 
    "Date": "2017-08-27T10:05:22.7063498Z", 
} 

案例2:當我通過REST API

HttpClient client = new HttpClient(); 

string deviceId = "DemoDevice"; 
string baseUrl = "https://******.azure-devices.net/devices/" + deviceId + "/messages/events?api-version=2016-02-03"; 
client.BaseAddress = new Uri(baseUrl); 

var sas = @"SharedAccessSignature sr=********"; 
client.DefaultRequestHeaders.Add("Authorization", sas); 
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

    var message1 = new Microsoft.Azure.Devices.Client.Message(Encoding.ASCII.GetBytes(realTimeData.ToString())); 
message1.Properties.Add("Source", "AiR"); 


HttpResponseMessage response = client.PostAsJsonAsync(baseUrl, message1).Result; 

調用此方法發送事件後做同樣的事情,當我檢查的消息服務總線資源管理器看起來像

enter image description here

我不得不使用流分析這一做法,並通過REST客戶端發送小號的時候,因爲有效載荷越來越不同o面臨很多問題。

我做錯了什麼,或者在通過Rest客戶端發送過程中有什麼不同嗎?

回答

0

以下是修復:

var message1 = new StringContent(JsonConvert.SerializeObject(new RealTimeMachineData() { Date = DateTime.UtcNow, MachineCode = "M1" })); 
client.DefaultRequestHeaders.Add("iothub-app-Source", "AiR"); 
+0

這是行不通的。 – JARVIS

+0

它應該是工作,我已經在我的物聯網集線器上進行了測試。您的實施對於有效負載和標題不正確。請注意,IoT Hub路由是Source =「AiR」 –

相關問題