Количество устройств можно получить с помощью запроса устройства , например:
SELECT COUNT() AS numberOfDevices FROM c
, который возвращает что-то вроде этого:
[
{
"numberOfDevices": 123
}
]
Чтобы получить количество сообщений , вам необходимо подключиться к конечной точке, совместимой с концентратором событий, подключиться к каждому нижележащему разделу и посмотреть на каждый Информация о разделе ( Последний порядковый номер и Последовательный номер ).Однако при этом сохраняется некоторая задержка данных, поэтому, если вы не добавите к этому больше логики, вы получите число, представляющее число сообщений , находящихся на данный момент , присутствующих в концентраторе, а не общее количество с момента создания, а не общее оставшееся количество.
Обновление: вот код, показывающий пару методов для получения количества устройств:
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Azure.Devices;
using Newtonsoft.Json;
namespace Test
{
class Program
{
static async Task Main()
{
string connString = "HostName=_______.azure-devices.net;SharedAccessKeyName=_______;SharedAccessKey=_______";
RegistryManager registry = RegistryManager.CreateFromConnectionString(connString);
// Method 1: using Device Twin
string queryString = "SELECT COUNT() AS numberOfDevices FROM devices";
IQuery query = registry.CreateQuery(queryString, 1);
string json = (await query.GetNextAsJsonAsync()).FirstOrDefault();
Dictionary<string, long> data = JsonConvert.DeserializeObject<Dictionary<string, long>>(json);
long count1 = data["numberOfDevices"];
// Method 2: using Device Registry
RegistryStatistics stats = await registry.GetRegistryStatisticsAsync();
long count2 = stats.TotalDeviceCount;
}
}
}