C++ C++;使用CPPRestSDK(“卡萨布兰卡”)向azure IoT中心进行身份验证 编辑:我设法使c版本正常工作(见下文)
原始问题: 我正试图通过cpprestsdk连接Azure的物联网中心,并向其发布json结构的obj。但是,我在任何地方都找不到任何有关身份验证的信息 我遵循了这一点,并试图获得所有可用的文档,但我不确定人们如何通过RESTSDK连接到azure iot hub。有我不知道的扩展吗?因为我找不到任何使用授权的例子。但在MSDN的例子中,他们推得到。这个sdk应该只在本地运行而不启用任何形式的授权吗?我很困惑。。。有人能澄清一下或给我举个例子,说明如何向azure iot hub进行身份验证,然后将消息中继到服务总线吗? 我已经为此设置了路由 供参考:我正在使用v120和 C++尝试C++ C++;使用CPPRestSDK(“卡萨布兰卡”)向azure IoT中心进行身份验证 编辑:我设法使c版本正常工作(见下文),c++,azure,azure-iot-hub,casablanca,cpprest-sdk,C++,Azure,Azure Iot Hub,Casablanca,Cpprest Sdk,原始问题: 我正试图通过cpprestsdk连接Azure的物联网中心,并向其发布json结构的obj。但是,我在任何地方都找不到任何有关身份验证的信息 我遵循了这一点,并试图获得所有可用的文档,但我不确定人们如何通过RESTSDK连接到azure iot hub。有我不知道的扩展吗?因为我找不到任何使用授权的例子。但在MSDN的例子中,他们推得到。这个sdk应该只在本地运行而不启用任何形式的授权吗?我很困惑。。。有人能澄清一下或给我举个例子,说明如何向azure iot hub进行身份验证,然
// 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();
}
}
我设法让它在c#中以不同的方式工作
名为的库
我这样做是为了尝试将这个.NET项目导入到我的C++程序中。然而,这并不理想:
-
我宁愿在C++中看到解决方案。
- 我可以尝试让这个.NET程序在我的c++应用程序中运行。 为此,我浏览了以下资源:
- 在C++ V120 .NET 4(首选,否则4.5) 中对Azure IOT集线器进行身份验证
- 向物联网中心发送json解析消息
- 包括将消息中继到服务总线的“头”(如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);
}
}