示例#1
0
        public async Task <Microsoft.Azure.Devices.Client.DeviceClient> ProvisionAsync <DeviceClient>(DataStorage storage)
        {
            var connStringContent       = storage.Read("ConnectionString");
            DevicePortalInfoModel model = JsonConvert.DeserializeObject <DevicePortalInfoModel>(connStringContent);
            string scope          = model.Device.ID_Scope;
            string primaryKey     = model.Device.PrimaryKey;
            string secondaryKey   = model.Device.SecondaryKey;
            string registrationId = model.Device.RegistrationId;

            _sendTelemetry = false;

            using (var security = new SecurityProviderSymmetricKey(registrationId, primaryKey, secondaryKey))
            {
                using (var transport = new ProvisioningTransportHandlerAmqp(TransportFallbackType.TcpOnly))
                {
                    _sendTelemetry = false;
                    ProvisioningDeviceClient provClient =
                        ProvisioningDeviceClient.Create(GlobalDeviceEndpoint, scope, security, transport);
                    DeviceRegistrationResult result = await provClient.RegisterAsync().ConfigureAwait(false);

                    if (result.Status != ProvisioningRegistrationStatusType.Assigned)
                    {
                        return(null);
                    }
                    Console.WriteLine($"Provisioninged device : {result.DeviceId} at {result.AssignedHub}");
                    var client = Microsoft.Azure.Devices.Client.DeviceClient.Create(result.AssignedHub, model.Auth, TransportType.Amqp);
                    client.SetMethodHandlerAsync("Reprovision", ReprovisionHandler, null).GetAwaiter().GetResult();
                    client.SetDesiredPropertyUpdateCallbackAsync(DesiredPropertyUpdated, null).GetAwaiter().GetResult();

                    //  TODO:Save new connection information
                    var auth    = new DeviceAuthenticationWithRegistrySymmetricKey(result.DeviceId, security.GetPrimaryKey());
                    var host    = result.AssignedHub;
                    var builder = IotHubConnectionStringBuilder.Create(host, auth);
                    var device  = new DevicePortalInfoModel
                    {
                        Host   = result.AssignedHub,
                        Auth   = new DeviceAuthenticationWithRegistrySymmetricKey(result.DeviceId, security.GetPrimaryKey()),
                        Device = new DeviceModel {
                            ID_Scope       = scope,
                            PrimaryKey     = security.GetPrimaryKey(),
                            SecondaryKey   = security.GetSecondaryKey(),
                            RegistrationId = result.RegistrationId,
                            DeviceId       = result.DeviceId
                        },
                        ConnectionString = builder.ToString()
                    };

                    _storage.Write(DataStorage.DeviceConnectionString, JsonConvert.SerializeObject(device));
                    return(client);
                }
            }
        }
示例#2
0
        public static async Task <DevicePortalInfoModel> ProvisionDeviceAsync(DeviceModel device)
        {
            try
            {
                using (var security = new SecurityProviderSymmetricKey(device.RegistrationId, device.PrimaryKey, device.SecondaryKey))
                {
                    using (var transport = new ProvisioningTransportHandlerAmqp(TransportFallbackType.TcpOnly))
                    {
                        ProvisioningDeviceClient provClient =
                            ProvisioningDeviceClient.Create(GlobalDeviceEndpoint, device.ID_Scope, security, transport);
                        var result = await provClient.RegisterAsync();

                        if (result.Status != ProvisioningRegistrationStatusType.Assigned)
                        {
                            return(null);
                        }
                        IAuthenticationMethod auth = GetAuthenticationMethod(result, security);
                        var host    = $"{result.AssignedHub}";
                        var builder = IotHubConnectionStringBuilder.Create(host, auth);
                        device.PrimaryKey   = security.GetPrimaryKey();
                        device.SecondaryKey = security.GetSecondaryKey();
                        var o = new DevicePortalInfoModel
                        {
                            Host             = host,
                            Auth             = auth,
                            Device           = device,
                            ConnectionString = builder.ToString()
                        };
                        return(o);
                    }
                }
            }
            catch (Exception exp)
            {
                throw exp;
            }
        }