private async Task ReceiveHubMessagesAsync() { using (Message receivedMessage = await DeviceClient.ReceiveAsync(TimeSpan.FromSeconds(30)).ConfigureAwait(false)) { if (receivedMessage == null) { Console.WriteLine("\t{0}> Timed out", DateTime.Now.ToLocalTime()); return; } var message = new MqttApplicationMessageBuilder() .WithPayload(receivedMessage.GetBytes()); string payload = Encoding.ASCII.GetString(receivedMessage.GetBytes()); Console.WriteLine("\t{0}> Received message: {1}", DateTime.Now.ToLocalTime(), payload); if (receivedMessage.Properties.ContainsKey("topic")) { message.WithTopic(receivedMessage.Properties["topic"]); } var keyExclude = new string[] { "topic", "clientId" }; foreach (var prop in receivedMessage.Properties.Where(k => !keyExclude.Contains(k.Key))) { message.WithUserProperty(prop.Key, prop.Value); } await LocalClient.PublishAsync(message.Build(), CancellationToken.None); await DeviceClient.CompleteAsync(receivedMessage).ConfigureAwait(false); } }