2016-03-17 3 views
1

Я хочу сделать приложение UWP для приема сообщений от концентратора Azure IoT. Я нашел пример код для консоли приемника App, но он не работает с UWP, потому что UWP не поддерживает этот референсПриложение UWP для приема сообщений от концентратора Azure IoT

using Microsoft.ServiceBus.Messaging; 

Может кто-то пост кода UWP приложения для receivering сообщения от Azure IoT хаба?

+0

Я столкнулся с тем же вопросом –

ответ

0

Я также сталкиваются же issue.I не может получить сообщение Azure ВГД hub.Because AMQP не поддерживает в UWP. Я пробовал ниже образца. Но мне не повезло получить сообщение. https://github.com/Azure/azure-iot-sdks/tree/master/csharp/device/samples/UWPSample

Пожалуйста, дайте мне знать, если вы получили сообщение в UWP. Планируется ли поддержка AMQP в UWP? Когда вы дадите это обновление?

+0

, почему вы ставите такой же ответ, как указано выше –

0

Получаемые сообщения от облака к устройству поддерживается в официальном SDK с использованием конечной точки HTTP. См:

https://github.com/Azure/azure-iot-sdks/tree/master/csharp/device/samples/UWPSample

Прием сообщений, отправленных устройством в облако сложнее, потому что это AMQP конечная точка, но может быть сделано с помощью AMQPNetLite:

https://paolopatierno.wordpress.com/2015/10/31/azure-iot-hub-commands-and-feedback-using-amqp-net-lite/

1

Вы можете попробовать AzureSBLite, вы можете установить это из диспетчера пакетов NuGet.

https://github.com/ppatierno/azuresblite

Пример кода для получения:

string ConnectionString = "<EventHub-Compatible-EndPoint>;SharedAccessKeyName=iothubowner;SharedAccessKey<Key> 
    static string eventHubEntity = "<EventHub-Compatible-Name>"; 
    string partitionId = "0"; 
    DateTime startingDateTimeUtc; 
    EventHubConsumerGroup group; 
    EventHubClient client; 
    MessagingFactory factory; 
    EventHubReceiver receiver; 

public async Task ReceiveDataFromCloud() 
    { 
     startingDateTimeUtc = DateTime.UtcNow; 
     ServiceBusConnectionStringBuilder builder = new ServiceBusConnectionStringBuilder(ConnectionString); 
     builder.TransportType = ppatierno.AzureSBLite.Messaging.TransportType.Amqp; 

     factory = MessagingFactory.CreateFromConnectionString(ConnectionString); 

     client = factory.CreateEventHubClient(eventHubEntity); 
     group = client.GetDefaultConsumerGroup(); 
     receiver = group.CreateReceiver(partitionId.ToString(), startingDateTimeUtc);//startingDateTimeUtc 
     while (true) 
     { 
      EventData data = receiver.Receive(); 

      if (data != null) 
      { 
       var receiveddata = Encoding.UTF8.GetString(data.GetBytes()); 

       Debug.WriteLine("{0} {1} {2}", data.SequenceNumber, data.EnqueuedTimeUtc.ToLocalTime(), Encoding.UTF8.GetString(data.GetBytes())); 

      } 
      else 
      { 
       break; 
      } 

      await Task.Delay(2000); 

     } 

     receiver.Close(); 
     client.Close(); 
     factory.Close(); 

    } 

Вы можете получить EventHub-Compatible конечных точек и EventHub-Compatible имя от IoTHub настройки-> раздел Сообщения. В этом разделе «Настройки устройства для облака».

0

Это лучший способ получать сообщения от iot. есть два способа сделать это C2D и D2C ... облако для устройства и устройства для облачных вычислений. Это зависит от вашего требования. Код полностью протестирован мной:

public sealed partial class MainPage : Page 
{ 
    public MainPage() 
    { 
     this.InitializeComponent(); 
     //txtblkMessages.Text = "test"; 
     Start(); 
    } 

    private static int MESSAGE_COUNT = 1; 

    private const string DeviceConnectionString = "HostName=[your hostname];DeviceId=[your DeviceId];SharedAccessKey=[your shared key]"; 
    public async Task Start() 
    { 
     try 
     { 
      DeviceClient deviceClient = DeviceClient.CreateFromConnectionString(DeviceConnectionString, TransportType.Amqp); 
      //await SendEvent(deviceClient); 
      await ReceiveCommands(deviceClient); 
     } 
     catch (Exception ex) 
     { 
      Debug.WriteLine("Error in sample: {0}", ex.Message); 
     } 
    } 

    async Task SendEvent(DeviceClient deviceClient) 
    { 
     string dataBuffer; 
     //for (int count = 0; count < MESSAGE_COUNT; count++) 
     //{ 
     dataBuffer = "Hello Iot"; 
     Message eventMessage = new Message(Encoding.UTF8.GetBytes(dataBuffer)); 
     await deviceClient.SendEventAsync(eventMessage); 
     // } 
    } 

    async Task ReceiveCommands(DeviceClient deviceClient) 
    { 
     Message receivedMessage; 
     string messageData; 
     while (true) 
     { 
      receivedMessage = await deviceClient.ReceiveAsync(); 
      if (receivedMessage != null) 
      { 
       messageData = Encoding.ASCII.GetString(receivedMessage.GetBytes()); 
       txtblkMessages.Text = messageData + "\n" + txtblkMessages.Text; 
       await deviceClient.CompleteAsync(receivedMessage); 
      } 
      // Note: In this sample, the polling interval is set to 
      // 10 seconds to enable you to see messages as they are sent. 
      // To enable an IoT solution to scale, you should extend this // interval. For example, to scale to 1 million devices, set 
      // the polling interval to 25 minutes. 
      // For further information, see 
      // https://azure.microsoft.com/documentation/articles/iot-hub-devguide/#messaging 
      await Task.Delay(TimeSpan.FromSeconds(1)); 
     } 
    } 
} 
Смежные вопросы