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); } } }
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; } }