Azure IoT中心:无法使用AMQP协议调用直接方法

时间:2019-02-19 04:52:55

标签: c# azure iot azure-iot-hub

我一直在尝试使用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"

1 个答案:

答案 0 :(得分:2)

好吧,我知道您的问题是什么:在最新版本的SDK中,关于阻塞线程的更改有所变化。我不知道这是预期的变化还是回归。

但是,在您的情况下,import Vue from 'vue' import Notifications from 'vue-notification' Vue.use(Notifications) export default function install(Vue) { Object.defineProperty(Vue, 'notification', { get() { return notification; } }) Object.defineProperty(Vue.prototype, '$notification', { get() { return notification; } }) } function notification(message) { Vue.notify({ group: 'panel', type: 'success', duration: 5000, text: message }) } 首先以某种方式阻止了AMQP的连接。 MQTT不受此影响-这可能表明它可能是回归。

因此,如果将Console.ReadKey()更改为例如Console.ReadKey(),它将在我的测试中再次起作用。