Condividi tramite


Creare e gestire i lease di BLOB con .NET

Questo articolo illustra come creare e gestire i lease di BLOB usando la libreria client di Archiviazione di Azure per .NET. È possibile usare la libreria client per acquisire, rinnovare, rilasciare e interrompere i lease dei BLOB.

Prerequisiti

Configurazione dell'ambiente

Se non si dispone di un progetto esistente, questa sezione illustra come configurare un progetto per l'uso con la libreria client Archiviazione BLOB di Azure per .NET. I passaggi includono l'installazione dei pacchetti, l'aggiunta using di direttive e la creazione di un oggetto client autorizzato. Per informazioni dettagliate, vedere Introduzione a Archiviazione BLOB di Azure e .NET.

Installare i pacchetti

Nella directory del progetto installare i pacchetti per le librerie client di Archiviazione BLOB di Azure e Azure Identity usando il comando dotnet add package. Il pacchetto Azure.Identity è necessario per le connessioni senza password ai servizi di Azure.

dotnet add package Azure.Storage.Blobs
dotnet add package Azure.Identity

Aggiungere le direttive using

Aggiungere queste using direttive all'inizio del file di codice:

using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;

Alcuni esempi di codice in questo articolo potrebbero richiedere direttive aggiuntive using .

Creare un oggetto client

Per connettere un'app all'archiviazione BLOB, creare un'istanza di BlobServiceClient. Nell'esempio seguente viene illustrato come creare un oggetto client usando DefaultAzureCredential per l'autorizzazione:

public BlobServiceClient GetBlobServiceClient(string accountName)
{
    BlobServiceClient client = new(
        new Uri($"https://{accountName}.blob.core.windows.net"),
        new DefaultAzureCredential());

    return client;
}

È anche possibile registrare un client del servizio per l'inserimento delle dipendenze in un'app .NET. Per altre informazioni sulla creazione e la gestione di oggetti client, vedere Creare e gestire oggetti client che interagiscono con le risorse dati.

Autorizzazione

Il meccanismo di autorizzazione deve disporre delle autorizzazioni necessarie per lavorare con un lease di BLOB. Per l'autorizzazione con Microsoft Entra ID (scelta consigliata), è necessario il ruolo predefinito Controllo degli accessi in base al ruolo di Azure Collaboratore ai dati dei BLOB di archiviazione o versione successiva. Per altre informazioni, vedere le linee guida per l'autorizzazione per il BLOB di lease (API REST).

Informazioni sui lease di BLOB

Un lease crea e gestisce un blocco su un BLOB per operazioni di scrittura ed eliminazione. La durata del blocco può variare da 15 a 60 secondi o può essere infinita. Un lease su un BLOB fornisce un accesso esclusivo per scrittura ed eliminazione al BLOB. Per scrivere su un BLOB con un lease attivo, un client deve includere l'ID del lease attivo con la richiesta di scrittura.

Per ulteriori informazioni sugli stati di lease e su quando è possibile eseguire una determinata azione su un lease, consultare Stati di lease e azioni.

Su un contenitore che include BLOB con un lease attivo, sono consentite tutte le operazioni dei contenitori, inclusa l'operazione Delete Container. Pertanto, un contenitore può essere eliminato anche se i BLOB al suo interno presentano lease attivi. Usare l'operazione Lease Container per controllare i diritti di eliminazione di un contenitore.

Le operazioni di lease vengono gestite dalla classe BlobLeaseClient, che fornisce un client contenente tutte le operazioni di lease per BLOB e contenitori. Per altre informazioni sui lease di contenitori tramite la libreria client, vedere Creare e gestire lease di contenitori con Java.

Acquisire un lease

Quando si acquisisce un lease di un BLOB, si ottiene un ID lease che può essere usato dal codice per operare sul BLOB. Se il BLOB ha già un lease attivo, è possibile richiedere un nuovo lease soltanto usando l'ID del lease attivo. Tuttavia, è possibile specificare una nuova durata del lease.

Per acquisire un lease, creare un'istanza della classe BlobLeaseClient e quindi usare uno dei metodi seguenti:

L'esempio seguente acquisisce un lease di 30 secondi per un BLOB:

public static async Task<BlobLeaseClient> AcquireBlobLeaseAsync(
    BlobClient blobClient)
{
    // Get a BlobLeaseClient object to work with a blob lease
    BlobLeaseClient leaseClient = blobClient.GetBlobLeaseClient();

    Response<BlobLease> response = 
        await leaseClient.AcquireAsync(duration: TimeSpan.FromSeconds(30));

    // Use response.Value to get information about the blob lease

    return leaseClient;
}

Rinnovare un lease

È possibile rinnovare il lease di un BLOB se l'ID del lease specificato nella richiesta corrisponde all'ID del lease associato al BLOB. Il lease può essere rinnovato anche se scaduto, purché il BLOB non sia stato modificato o sottoposto nuovamente a lease dopo la scadenza del lease. Quando si rinnova un lease, la durata del lease viene reimpostata.

Per rinnovare un lease, usare uno dei metodi seguenti in un'istanza di BlobLeaseClient:

L'esempio seguente rinnova un lease per un BLOB:

public static async Task RenewBlobLeaseAsync(
    BlobClient blobClient,
    string leaseID)
{
    // Get a BlobLeaseClient object to work with a blob lease
    BlobLeaseClient leaseClient = blobClient.GetBlobLeaseClient(leaseID);

    await leaseClient.RenewAsync();
}

Rilasciare un lease

È possibile rilasciare il lease di un BLOB se l'ID del lease specificato nella richiesta corrisponde all'ID del lease associato al BLOB. Il rilascio di un lease consente a un altro client di acquisire un lease per il BLOB non appena il rilascio è completato.

È possibile rilasciare un lease, usare uno dei metodi seguenti in un'istanza BlobLeaseClient:

L'esempio seguente rilascia un lease su un BLOB:

public static async Task ReleaseBlobLeaseAsync(
    BlobClient blobClient,
    string leaseID)
{
    // Get a BlobLeaseClient object to work with a blob lease
    BlobLeaseClient leaseClient = blobClient.GetBlobLeaseClient(leaseID);

    await leaseClient.ReleaseAsync();
}

Interrompere un lease

È possibile interrompere un lease di BLOB se il BLOB presenta un lease attivo. Qualsiasi richiesta autorizzata può interrompere il lease. Non è necessario che nella richiesta sia specificato un ID lease corrispondente. Un lease non può essere rinnovato dopo che è stato interrotto e l'interruzione di un lease impedisce di acquisirne uno nuovo per un certo periodo, fino alla scadenza o al rilascio del lease originale.

Per interrompere un lease, usare uno dei metodi seguenti in un'istanza di BlobLeaseClient:

L'esempio seguente interrompe un lease su un BLOB:

public static async Task BreakBlobLeaseAsync(
    BlobClient blobClient)
{
    // Get a BlobLeaseClient object to work with a blob lease
    BlobLeaseClient leaseClient = blobClient.GetBlobLeaseClient();

    await leaseClient.BreakAsync();
}

Azioni e stati dei lease

Il diagramma seguente illustra i cinque stati di un lease e i comandi o gli eventi che causano modifiche dello stato del lease.

Diagramma che mostra gli stati di lease del BLOB e i trigger di modifica dello stato.

La tabella seguente elenca i cinque stati di lease, fornisce una breve descrizione di ognuno di essi ed elenca le azioni di lease consentite in un determinato stato. Queste azioni di lease causano transizioni di stato, come illustrato nel diagramma.

Stato lease Descrizione Azioni di lease consentite
Disponibile Il lease è sbloccato e può essere acquisito. acquire
Sottoposto a lease Il lease è bloccato. acquire (solo stesso ID del lease), renew, change, release e break
Scaduta La durata del lease è scaduta. acquire, renew, release e break
Interruzione Il lease è stato interrotto, ma rimarrà bloccato fino alla scadenza del periodo di interruzione. release e break
Interrotto Il lease è stato interrotto e il periodo di interruzione è scaduto. acquire, release e break

Quando un lease scade, l’ID lease viene mantenuto dal servizio BLOB finché il BLOB non viene modificato o nuovamente sottoposto a lease. Un client può provare a rinnovare o rilasciare il lease usando l'ID lease scaduto. Se l'operazione ha esito positivo, il client sa che il BLOB non è stato modificato dall'ultima volta che l'ID è stato ritenuto valido. Se la richiesta ha esito negativo, il client sa che il BLOB è stato modificato o nuovamente associato a un lease dall’ultima validità del lease. Il client deve quindi acquisire un nuovo lease sul BLOB.

Se un lease scade anziché essere rilasciato in modo esplicito, è possibile che un client debba attendere fino a un minuto prima di poter acquisire un nuovo lease per il BLOB. Tuttavia, se il BLOB non è stato modificato, il client può rinnovare subito il lease con il relativo ID lease.

Non è possibile concedere un lease per uno snapshot del BLOB, poiché gli snapshot sono di sola lettura. La richiesta di un lease per uno snapshot risulterà nel codice di stato 400 (Bad Request).

Risorse

Per altre informazioni su come gestire i lease di BLOB tramite la libreria client di Archiviazione BLOB di Azure per .NET, vedere le risorse seguenti.

Operazioni dell'API REST

Azure SDK per .NET contiene librerie basate sull'API REST di Azure, che consentono di interagire con le operazioni dell'API REST tramite paradigmi .NET noti. I metodi della libreria client per gestire i lease di BLOB usano l'operazione API REST seguente:

Esempi di codice

Risorse della libreria client

Vedi anche