Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从HttpTrigger函数读取Azure IoT集线器遥测_C#_.net_Azure_Azure Iot Hub - Fatal编程技术网

C# 从HttpTrigger函数读取Azure IoT集线器遥测

C# 从HttpTrigger函数读取Azure IoT集线器遥测,c#,.net,azure,azure-iot-hub,C#,.net,Azure,Azure Iot Hub,用例 我有一个物联网中心设备,它向物联网中心发送遥测数据。 我想处理遥测数据,例如使用函数存储到数据库 功能 我在VS2019中创建了以下函数并将其发布到Azure: [FunctionName(“HttpTrigger”)] 公共静态异步任务运行( [HttpTrigger(AuthorizationLevel.Anonymous,“post”)]HttpRequestMessage请求, ILogger日志) { LogInformation(“C#HTTP触发器函数处理了一个请求。”);

用例

我有一个物联网中心设备,它向物联网中心发送遥测数据。 我想处理遥测数据,例如使用函数存储到数据库

功能

我在VS2019中创建了以下函数并将其发布到Azure:

[FunctionName(“HttpTrigger”)]
公共静态异步任务运行(
[HttpTrigger(AuthorizationLevel.Anonymous,“post”)]HttpRequestMessage请求,
ILogger日志)
{
LogInformation(“C#HTTP触发器函数处理了一个请求。”);
var messages=wait req.Content.ReadAsAsync();
//如果请求用于订阅验证,请发回验证代码。
如果(messages.Count>0&&string.Equals((string)messages[0][“eventType”],
“Microsoft.EventGrid.SubscriptionValidationEvent”,
系统.字符串比较.序号(案例)
{
登录信息(“收到验证请求”);
返回请求CreateResponse(新的
{
validationResponse=消息[0][“数据”][“验证代码”]
});
}
//该请求不用于订阅验证,因此它用于一个或多个事件。
foreach(消息中的JObject消息)
{
//处理一个事件。
EventGridEvent=message.ToObject();
log.LogInformation($“Subject:{eventGridEvent.Subject}”);
log.LogInformation($“Time:{eventGridEvent.EventTime}”);
log.LogInformation($“事件数据:{eventGridEvent.data.ToString()}”);
}
返回请求CreateResponse(HttpStatusCode.OK);
}
资料来源:

活动订阅

在IoT Hub中,我使用Web钩子端点类型创建了一个触发函数的事件订阅

问题

事件数据的主体似乎已加密(?):

虽然在云Shell中,我可以看到可读的数据。我还可以通过.Net中的EventHubClient读取设备到云的消息来查看可读数据


我错过了什么?如何解密正文?

正文是Base64编码的,您可以使用

这是消息的可读正文:
{“DateTime”:“2019-10-05T10:09:29”,“ActualArrif”:1,“ActualPowerDelivered”:271.0,“TotalElectricityDeliveredArrif1”:6015577.0,“TotalElectricityDeliveredArrif2”:6027952.0}

您的设备发送遥测数据时没有指定内容类型和内容编码,请参见systemProperties对象中缺少这些属性

发送遥测数据时,设备需要填充这些系统属性,然后您将在事件消息中看到:

 "systemProperties":{
    "iothub-content-type":"application/json",
    "iothub-content-encoding":"utf-8",
    ...
事件的data.body将是json格式的文本


更多详细信息。

它未加密。它是一个base64字符串或是GZIP,我不认为它是GZIP,因为响应中的头会指示它是GZIP。HTML具有特殊字符,不能作为消息的一部分,如<和>。所以我会使用Convert.From
 "systemProperties":{
    "iothub-content-type":"application/json",
    "iothub-content-encoding":"utf-8",
    ...