在 Azure 函数中访问 ServiceBus.Messaging.EventData?
Access To ServiceBus.Messaging.EventData in an Azure Function?
我想创建一个 Azure Functions,只要有消息发送到 Azure IoT 中心就会触发。在我编写的 C# 应用程序中,我创建了一个从集线器中提取消息的方法。在该方法中,我可以访问包含有关消息的所有可用信息的 ServiceBus.Messaging.EventData 对象。该方法如下所示:
private static async Task ReceiveMessagesFromDeviceAsync(string partition, CancellationToken ct)
{
var eventHubReceiver = eventHubClient.GetDefaultConsumerGroup().CreateReceiver(partition, System.DateTime.UtcNow);
while (true)
{
if (ct.IsCancellationRequested)
break;
EventData eventData = await eventHubReceiver.ReceiveAsync();
if (eventData == null)
continue;
// Get the Device Id which is included in the SystemProperties dictionary
string deviceId = eventData.SystemProperties["iothub-connection-device-id"].ToString();
string data = Encoding.UTF8.GetString(eventData.GetBytes());
Console.WriteLine("Message received - DeviceId: {0}; Partition: {1}; Data: '{2}'", deviceId, partition, data);
}
}
当我尝试在门户中创建基于 C# 的 Azure 函数时,创建的默认方法如下所示:
public static void Run(string myIoTHubMessage, TraceWriter log)
{
log.Info($"C# IoT Hub trigger function processed a message: {myIoTHubMessage}");
}
我想知道是否可以通过某种方式访问整个消息对象,就像在我的 C# 应用程序中一样,而不是仅仅访问消息本身 ('myIotHubMessage')?
注意:我尝试了以下方法,但 Azure Functions 不喜欢第一个 using 参考。找不到引用。
using Microsoft.ServiceBus.Messaging;
using System.Text;
public static void Run(EventData eventData, TraceWriter log)
{
var data = Encoding.UTF8.GetString(eventData.GetBytes());
log.Info($"C# IoT Hub trigger function processed a message: {data}");
}
是的,只需将 string
替换为 EventData
,添加对包的引用和对命名空间的 using
:
#r "Microsoft.ServiceBus"
using System.Text;
using Microsoft.ServiceBus.Messaging;
public static void Run(EventData myEventHubMessage, TraceWriter log)
{
log.Info($"{Encoding.UTF8.GetString(myEventHubMessage.GetBytes())}");
}
您可以按照后续步骤创建一个 Azure 函数,只要有消息发送到 Azure IoT 中心就会触发该函数。
- 使用 Azure 门户创建物联网中心,请参考此article。
- 创建功能应用程序,并为 IoTHub 添加一个功能,每当 IoT 中心为事件 Hub-compatible 端点发送新消息时,此功能将 运行。
- 修改函数中的代码如下,保存并运行函数。
#r "Microsoft.ServiceBus"
using System.Text;
using Microsoft.ServiceBus.Messaging;
public static void Run(EventData myIoTHubMessage, TraceWriter log)
{
log.Info($"{Encoding.UTF8.GetString(myIoTHubMessage.GetBytes())}");
}
当您使用设备客户端向 IoT 中心发送消息时,函数应用程序将触发,它将显示在日志中。
我想创建一个 Azure Functions,只要有消息发送到 Azure IoT 中心就会触发。在我编写的 C# 应用程序中,我创建了一个从集线器中提取消息的方法。在该方法中,我可以访问包含有关消息的所有可用信息的 ServiceBus.Messaging.EventData 对象。该方法如下所示:
private static async Task ReceiveMessagesFromDeviceAsync(string partition, CancellationToken ct)
{
var eventHubReceiver = eventHubClient.GetDefaultConsumerGroup().CreateReceiver(partition, System.DateTime.UtcNow);
while (true)
{
if (ct.IsCancellationRequested)
break;
EventData eventData = await eventHubReceiver.ReceiveAsync();
if (eventData == null)
continue;
// Get the Device Id which is included in the SystemProperties dictionary
string deviceId = eventData.SystemProperties["iothub-connection-device-id"].ToString();
string data = Encoding.UTF8.GetString(eventData.GetBytes());
Console.WriteLine("Message received - DeviceId: {0}; Partition: {1}; Data: '{2}'", deviceId, partition, data);
}
}
当我尝试在门户中创建基于 C# 的 Azure 函数时,创建的默认方法如下所示:
public static void Run(string myIoTHubMessage, TraceWriter log)
{
log.Info($"C# IoT Hub trigger function processed a message: {myIoTHubMessage}");
}
我想知道是否可以通过某种方式访问整个消息对象,就像在我的 C# 应用程序中一样,而不是仅仅访问消息本身 ('myIotHubMessage')?
注意:我尝试了以下方法,但 Azure Functions 不喜欢第一个 using 参考。找不到引用。
using Microsoft.ServiceBus.Messaging;
using System.Text;
public static void Run(EventData eventData, TraceWriter log)
{
var data = Encoding.UTF8.GetString(eventData.GetBytes());
log.Info($"C# IoT Hub trigger function processed a message: {data}");
}
是的,只需将 string
替换为 EventData
,添加对包的引用和对命名空间的 using
:
#r "Microsoft.ServiceBus"
using System.Text;
using Microsoft.ServiceBus.Messaging;
public static void Run(EventData myEventHubMessage, TraceWriter log)
{
log.Info($"{Encoding.UTF8.GetString(myEventHubMessage.GetBytes())}");
}
您可以按照后续步骤创建一个 Azure 函数,只要有消息发送到 Azure IoT 中心就会触发该函数。
- 使用 Azure 门户创建物联网中心,请参考此article。
- 创建功能应用程序,并为 IoTHub 添加一个功能,每当 IoT 中心为事件 Hub-compatible 端点发送新消息时,此功能将 运行。
- 修改函数中的代码如下,保存并运行函数。
#r "Microsoft.ServiceBus" using System.Text; using Microsoft.ServiceBus.Messaging; public static void Run(EventData myIoTHubMessage, TraceWriter log) { log.Info($"{Encoding.UTF8.GetString(myIoTHubMessage.GetBytes())}"); }
当您使用设备客户端向 IoT 中心发送消息时,函数应用程序将触发,它将显示在日志中。