Aumentar el timeout en las operaciones al servicio de blobs de Windows Azure Storage

Cuando subimos archivos de un tamaño considerable a Windows Azure Storage es posible que el timeout por defecto quizás se nos quede corto 🙁 Si hacemos las llamadas directamente a través de la API REST el timeout por defecto son 30 segundos. Por el contrario, Storage Client amplia el mismo hasta 90 segundos, lanzando una excepción si no recibe respuesta.

En el segundo supuesto, con Storage Client, existen dos formas de modificar el tiempo de timeout: a nivel global o individual.

Modificación del timeout a nivel global

Si lo que queremos es que todas nuestras operaciones al sistema de blobs tenga el mismo timeout, debemos modificar el mismo al nivel de objeto CloudBlobClient.

private readonly CloudStorageAccount _storageAccount;

public CloudStorageBlob(CloudStorageAccount storageAccount)
{
    _storageAccount = storageAccount;
}

public CloudBlobContainer GetContainerReference(string containerName)
{
    var blobClient = _storageAccount.CreateCloudBlobClient();

    blobClient.Timeout = new TimeSpan(1, 0, 0);

    var container = blobClient.GetContainerReference(containerName);
    container.CreateIfNotExist();

    return container;
}

Como podéis ver en el código anterior, al objeto blobClient le modificamos la propiedad Timeout a una hora ampliando así el tiempo de espera.

Modificación del timeout a nivel individual

En el caso de que solamente queramos modificar el tiempo de timeout para una operación en concreto, por ejemplo en la subida de archivos, podemos utilizar la sobrecarga que acepta el parámetro BlobRequestOptions de la siguiente forma:

public Uri UploadFileToBlob(CloudBlobContainer blobContainer, string blobAddress, Stream stream)
{
    var blob = blobContainer.GetBlobReference(blobAddress);
    blob.UploadFromStream(stream, new BlobRequestOptions { Timeout = new TimeSpan(1, 0, 0) });
    return blob.Attributes.Uri;
}

Espero que sea de utilidad 😀

¡Saludos!