如何向IoT Hub连接字符串添加发送权限?

时间:2018-04-12 21:30:11

标签: azure-functions azure-iot-hub

我正在创建一个需要将消息发送到Azure IoT Hub的Azure功能。当该函数尝试执行发送时,我收到以下错误:

2018-04-12T20:19:28.567 [Error] Microsoft.ServiceBus: Unauthorized access. 'Send' claim(s) are required to perform this operation. Resource: 'sb://iothub-ns-monitorhub-xxxxx-xxxxxxxx.servicebus.windows.net/monitorhub'. TrackingId:a79b2055d85446bd9739bd229aada0d7_G1, SystemTracker:gateway5 

所以看来我需要向我的集线器连接字符串添加发送声明。但是,当我转到我的中心命名空间并单击共享访问策略时,我会看到:

enter image description here

权限列表不包含'发送'允许。如何向集线器的连接字符串添加“发送”权限?

以下是发生错误的Azure功能。代码编译时没有错误,但会产生运行时错误。

#r "Microsoft.ServiceBus"

using System;
using System.Text;
using Microsoft.ServiceBus.Messaging;

public static void Run(EventData eventData, out string outputEventHubMessage, TraceWriter log)
{
    // Get some system properties from the SystemProperties dictionary
    var deviceId = eventData.SystemProperties["iothub-connection-device-id"].ToString();
    var messageSource = eventData.SystemProperties["iothub-message-source"].ToString();
    var enqueuedTime = eventData.SystemProperties["iothub-enqueuedtime"].ToString();
    var sequenceNumber = eventData.SystemProperties["SequenceNumber"].ToString();
    var offset = eventData.SystemProperties["Offset"].ToString();

    var data = Encoding.UTF8.GetString(eventData.GetBytes());
    var message = string.Format("Message Source: {0}; Enqueued Time: {1}; Sequence Number: {2}; Offset: {3}; DeviceId: {4}; Data: {5}", messageSource, enqueuedTime, sequenceNumber, offset, deviceId, data);

    outputEventHubMessage = message;

    log.Info($"{message}");
}

1 个答案:

答案 0 :(得分:0)

根据您更新的代码和注释,您想要将事件发送到内置于Event Hub兼容端点的azure iot hub。但它只能用于接收D2C消息。

  

IoT Hub为您的后端服务公开消息/事件内置端点,以读取集线器收到的设备到云消息。此端点与Event Hub兼容,使您可以使用Event Hubs服务支持的任何机制来读取消息。

参考"Read device-to-cloud messages from the built-in endpoint"

Azure功能通常由来自azure iot hub的设备消息触发,可以将这些消息路由到Azure存储或执行其他操作。

如果您仍想从azure功能发送D2C消息或有任何其他问题,请随时告诉我。

一些参考文献:

Processing data from IoT Hub with Azure Functions

Send device-to-cloud messages to IoT Hub

Send simulated telemetry