Оригинальный вопрос:
Я пытаюсь подключиться к IoT-концентратору Azure через cpprestsdk и POST с помощью json-структурированного объекта. Тем не менее, я не могу найти что-либо относительно аутентификации в любом месте.
Я следил за этим Пример MSDN и пытался получить всю доступную документацию, но я не уверен, как люди подключаются к Azure Iot Hub через этот отдых SDK. Есть ли какое-то расширение, о котором я не знаю? Потому что я не могу найти примеры, где используется авторизация. Но в примерах MSDN они нажимают и получают. Этот SDK должен работать только локально, без какой-либо авторизации? Я в замешательстве … Может кто-нибудь уточнить или привести пример того, как пройти аутентификацию в Azure iot Hub, а затем передать сообщение служебной шине?
Я уже настроил мою маршрутизацию для этого.
Для справки: я использую v120 и cpprestsdk 2.9.1.1.
Попытка C ++
// Upload result to Azure Hub.
pplx::task<void> UploadDataToHttpServerAsync(std::wstring data)
{
//using concurrency::streams::file_stream;
//using concurrency::streams::basic_istream;
// create a stream from a text string.
auto ss = concurrency::streams::wstringstream::open_istream(data);try
{
// HTTP request.
http_client client(L"LINK-I-GUESS");
return client.request(methods::POST, L"WHAT-LINK-SHOULD-THIS-BE?", data).then([data](pplx::task<http_response> previousTask)
{
std::wostringstream wss;
try
{
auto response = previousTask.get();
wss << L"Server returned status code " << response.status_code() << L"." << std::endl;
if (response.status_code() == status_codes::OK)
{
cout << L"data was sent";
}
else
{
cout << L"Error: " << response.status_code() << std::endl;
}
}
catch (const http_exception& e)
{
wss << e.what() << std::endl;
}
std::wcout << wss.str();
});
}
catch (const std::system_error& e)
{
std::wostringstream wss;
wss << e.what() << std::endl;
std::wcout << wss.str();
// Return an empty task.
return pplx::task_from_result();
}
}
Azure Dashboard.
Я ищу эти связи не в том месте?
Другие ресурсы, на которые я смотрел:
(C #) https://blogs.msdn.microsoft.com/chmitch/2016/11/16/sending-events-to-iot-hub-over-http-via-rest/
https://github.com/Microsoft/cpprestsdk/wiki
https://microsoft.github.io/cpprestsdk/namespaces.html
https://www.example-code.com/cpp/azure_service_bus_send_message_to_queue.asp -не имеет значения, но пришлось посмотреть, как другие библиотеки сделали это.
https://blogs.msdn.microsoft.com/vcblog/2013/02/26/the-c-rest-sdk-casablanca/
http://aka.ms/azure-iot-hub-vs-cs-2017-c
Любая помощь, которая может направить меня в правильном направлении, высоко ценится!
using System;
using Microsoft.Azure.Devices.Client;
using Newtonsoft.Json;
using System.Text;
using System.Threading.Tasks;
class AzureIoTHubClient
{
private static DeviceClient s_deviceClient;
private readonly static string s_connectionString = "HostName={0}.azure-devices.net;DeviceId={1};SharedAccessKey={2}";
// Async method to send simulated telemetry
private static async void SendDeviceToCloudMessagesAsync(string sData)
{
// Initial telemetry values
string currentTopic = "productionevent";
// Create JSON message
var telemetryDataPoint = new
{
topic = currentTopic,
data = sData,
};
var messageString = JsonConvert.SerializeObject(telemetryDataPoint);
var message = new Message(Encoding.ASCII.GetBytes(messageString));
// IoT hub can filter these properties without having access to the message body.
message.Properties.Add("topic", "productionevent");
// Send the telemetry message
await s_deviceClient.SendEventAsync(message);
Console.WriteLine("{0} > Sending message: {1}", DateTime.UtcNow, messageString);
await Task.Delay(500);
}
}
Мне удалось заставить его работать в C # с другим
библиотека называется Microsoft.Azure.Devices.Client.
Я сделал это, чтобы попытаться импортировать этот проект .NET в мою программу на C ++. Однако это не идеально:
Я бы предпочел увидеть решение в C ++.
Я мог бы попытаться заставить эту .NET-программу работать в моем c ++ приложении.
Для этого я просмотрел следующие ресурсы:
Как вызвать библиотеку C # из Native C ++ (с использованием C ++ \ CLI и IJW) — это выглядит многообещающе
https://www.codeproject.com/Tips/695387/Calling-Csharp-NET-methods-from-unmanaged-C-Cplusp
Любая помощь по аутентификации в IoT-хабе Azure на c ++ очень ценится.
Задача ещё не решена.
Других решений пока нет …