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!