Я пытался сделать прямой вызов метода, используя протокол AMQP.Но не могу заставить это работать.Я считаю, что вызов прямого метода возможен через AMQP, если я не ошибаюсь.Это работает с MQTT, хотя.Любые подсказки приветствуются.
Вот код:
using Microsoft.Azure.Devices.Client;
using Microsoft.Azure.Devices.Shared;
using Newtonsoft.Json;
using System;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace VirtualIoTDevice
{
internal class Program
{
private const string DeviceConnectionString = "device-connection-string";
private const string DEVICE_ID = "device01";
private static DeviceClient _device;
private static async Task Main(string[] args)
{
Console.WriteLine("Initializing virtual IoT device..");
using (_device = DeviceClient.CreateFromConnectionString(DeviceConnectionString, DEVICE_ID))
{
await _device.OpenAsync();
await _device.SetMethodHandlerAsync("showMessage", ShowMessage, null);
Console.ReadKey();
}
}
private static Task<MethodResponse> ShowMessage(MethodRequest methodRequest, object userContext)
{
Console.WriteLine("***Direct message received***");
Console.WriteLine(methodRequest.DataAsJson);
var responsePayload = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(new { response = "Message shown!" }));
return Task.FromResult(new MethodResponse(responsePayload, 200));
}
}
}
А вот команда для вызова прямого метода:
az iot hub invoke-device-method -n "iothub-name" -d "device01" --method-name "showMessage"