Modificar Encoding Reserved Units desde .NET

Si lo sé, hoy no he parado de publicar ¡pero hay tantas cosas por aprender! y estas son dudas o solicitudes que me piden y, siempre que tengo la oportunidad, me gusta compartirlas con todo el mundo. Al igual que esta mañana veíamos cómo se podían modificar las unidades reservadas para el streaming desde .NET, ahora queda por modificar las unidades de encoding que hemos reservado:

using System;
using System.Configuration;
using System.IO;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Text;

namespace ReservedUnits
{
    class Program
    {
        static void Main(string[] args)
        {
            //1. Get Application Settings
            var ServiceManagementUrl = ConfigurationManager.AppSettings["ServiceManagementUrl"];
            var SuscriptionId = ConfigurationManager.AppSettings["SubscriptionId"];
            var MediaAccountName = ConfigurationManager.AppSettings["MediaAccountName"];
            var CertificateB64 = ConfigurationManager.AppSettings["CertificateB64"];
            var Units = 1;

            //2. Create the request

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format("{0}/{1}/services/mediaservices/Accounts/{2}/ServiceQuotas", ServiceManagementUrl, SuscriptionId, MediaAccountName));

            request.Method = "PUT";
            request.Accept = "application/json";
            request.ContentType = "application/json; charset=utf-8";
            request.Headers.Add("x-ms-version", "2011-10-01");
            request.Headers.Add("Accept-Encoding: gzip, deflate");
            request.ClientCertificates.Add(new X509Certificate2(Convert.FromBase64String(CertificateB64)));

            //3. Payload
            string json = @"[{""RequestedUnits"": " + Units + @",""ServiceType"":""Encoding""}]";

            //4. Make the call

            using (Stream requestStream = request.GetRequestStream())
            {
                var requestBytes = Encoding.ASCII.GetBytes(json);
                requestStream.Write(requestBytes, 0, requestBytes.Length);

                //5. Get the response

                using (var response = (HttpWebResponse)request.GetResponse())
                {
                    var responseStream = response.GetResponseStream();
                    var reader = new StreamReader(responseStream);

                    Console.WriteLine(reader.ReadToEnd());
                }
            }

            Console.ReadLine();
        }
    }
}

Antes de nada quiero aclarar que esta Api REST no está documentada y no puedo garantizar que este código siga funcionando en el futuro. He conseguido localizar esta información revisando el código fuente de la herramienta Azure Media Services Explorer.

Para esta operación no disponemos todavía de un método en el SDK, por lo que hay que realizar la llamada directamente a la API REST. Para ello necesitamos la URL de administración (https://management.core.windows.net), el id de la suscripción, el nombre de la cuenta de Azure Media Service que queremos modificar y un certificado que esté asociado al portal de Azure. Para este ejemplo (no apto para producción), he obtenido toda esta información del archivo de publicación de la plataforma. Para descargar el tuyo, basta con hacer clic sobre este enlace y logarse con las credenciales de la suscripción de Microsoft Azure.

Una vez que tenemos todos los valores, creamos la petición a través de WebRequest.Create y configuramos la misma con los valores mostrados en el código anterior. Para añadir el certificado he utilizado new X509Certificate2(Convert.FromBase64String(CertificateB64) para poder realizar la transformación. El payload de la petición está en formato JSON y, simplificando el ejemplo, he montado el objeto en una cadena de texto, concatenado con el número de unidades que vamos a solicitar.

Por último, realizamos la llamada y obtenemos la respuesta de la petición. El resultado debería ser el siguiente:

Encoding Reserved Units request result

Espero que sea de utilidad.

¡Saludos!