РЕДАКТИРОВАТЬ: мне удалось получить работающую версию C # (ниже)
Оригинальный вопрос:
Я пытаюсь подключиться к 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/07/10/intercepting-http-requestresponse-using-c-rest-http-library/
https://blogs.msdn.microsoft.com/vcblog/2013/02/26/the-c-rest-sdk-casablanca/
http://aka.ms/azure-iot-hub-vs-cs-2017-c
Любая помощь, которая может направить меня в правильном направлении, высоко ценится!
РЕДАКТИРОВАТЬ: 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 # из Visual C ++
Как вызвать библиотеку C # из Native C ++ (с использованием C ++ \ CLI и IJW) - это выглядит многообещающе
https://www.codeproject.com/Tips/695387/Calling-Csharp-NET-methods-from-unmanaged-C-Cplusp
Любая помощь по аутентификации в IoT-хабе Azure на c ++ очень ценится.
TL; DR:
- Аутентификация в Azure iot Hub в C ++ v120 .NET 4.0 (предпочтительно, в противном случае 4.5)
- Отправка json-сообщения на iot hub.
- Включите «заголовки», которые ретранслируют сообщение на служебную шину (как видно в примере c #).