private static async Task <ServiceClientCredentials> GetCredentialsAsync(AzureMediaServicesConfig config)
        {
            // Use ApplicationTokenProvider.LoginSilentWithCertificateAsync or UserTokenProvider.LoginSilentAsync to get a token using service principal with certificate
            //// ClientAssertionCertificate
            //// ApplicationTokenProvider.LoginSilentWithCertificateAsync

            // Use ApplicationTokenProvider.LoginSilentAsync to get a token using a service principal with symmetric key
            ClientCredential clientCredential = new ClientCredential(config.AadClientId, config.AadSecret);

            return(await ApplicationTokenProvider.LoginSilentAsync(config.AadTenantId, clientCredential, ActiveDirectoryServiceSettings.Azure));
        }
        private static async Task <IAzureMediaServicesClient> CreateMediaServicesClientAsync(AzureMediaServicesConfig config)
        {
            var credentials = await GetCredentialsAsync(config);

            return(new AzureMediaServicesClient(config.ArmEndpoint, credentials)
            {
                SubscriptionId = config.SubscriptionId,
            });
        }
        static async Task Main(string[] args)
        {
            Console.WriteLine("Start Job");

            AzureMediaServicesConfig config = new AzureMediaServicesConfig(
                new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddEnvironmentVariables()
                .Build());

            try
            {
                Console.WriteLine("1. Login Azure Media Services");
                IAzureMediaServicesClient client = await CreateMediaServicesClientAsync(config);

                Console.WriteLine("connected");

                Console.WriteLine("2. Get StreamingEndpoint State");
                var streamingEndpoint = client.StreamingEndpoints.Get(config.ResourceGroup,
                                                                      config.AccountName,
                                                                      _defaultStreamingEndpointName);

                if (streamingEndpoint.ResourceState == StreamingEndpointResourceState.Stopped ||
                    streamingEndpoint.ResourceState == StreamingEndpointResourceState.Running)
                {
                    Console.WriteLine("3. Update StreamingEndpoint ScaleUnit");
                    Console.WriteLine($"  StreamingEndpoint-Before #{streamingEndpoint.ScaleUnits}");
                    var NewScaleUnitNumber = streamingEndpoint.ScaleUnits + _defaultChangeValue;
                    await client.StreamingEndpoints.BeginScaleAsync(
                        config.ResourceGroup,
                        config.AccountName,
                        _defaultStreamingEndpointName,
                        NewScaleUnitNumber);

                    Console.WriteLine($"  StreamingEndpoint-After  #{NewScaleUnitNumber}");
                }
                else
                {
                    Console.WriteLine("3. Skip update ScaleUnit because other operation process is working. Please retry this later.");
                }

                client.Dispose();
                Console.WriteLine("Completed!");
            }
            catch (Exception exception)
            {
                if (exception.Source.Contains("ActiveDirectory"))
                {
                    Console.Error.WriteLine("Tip: Make sure that you have filled out the appsettings.json file before running this sample.");
                }

                Console.Error.WriteLine($"{exception.Message}");

                ApiErrorException apiException = exception.GetBaseException() as ApiErrorException;
                if (apiException != null)
                {
                    Console.Error.WriteLine(
                        $"ERROR: API call failed with error code '{apiException.Body.Error.Code}' and message '{apiException.Body.Error.Message}'.");
                }
            }
        }