Поделиться через


Создание аренды BLOB-объектов и управление ими с помощью .NET

В этой статье показано, как создавать и управлять арендой BLOB-объектов с помощью клиентской библиотеки службы хранилища Azure для .NET. Вы можете использовать клиентскую библиотеку для получения, продления, освобождения и прерывания аренды BLOB.

Предварительные условия

Настройка среды

Если у вас нет существующего проекта, в этом разделе показано, как настроить проект для работы с клиентской библиотекой Хранилище BLOB-объектов Azure для .NET. Ниже приведены шаги по установке пакета, добавлению using директив и созданию авторизованного клиентского объекта. Дополнительные сведения см. в статье «Начало работы с хранилищем объектов Blob Azure и .NET».

Установка пакетов

В каталоге вашего проекта установите пакеты для клиентских библиотек Azure Blob Storage и Azure Identity с помощью команды dotnet add package. Пакет Azure.Identity необходим для подключений к службам Azure без пароля.

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

Добавьте директивы using.

Добавьте эти using директивы в начало файла кода:

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

Для некоторых примеров кода в этой статье могут потребоваться дополнительные using директивы.

Создание клиентского объекта

Чтобы подключить приложение к хранилищу BLOB-объектов, создайте экземпляр BLOBServiceClient. В следующем примере показано, как создать клиентский объект с помощью DefaultAzureCredential авторизации:

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

    return client;
}

Вы можете зарегистрировать клиент службы для внедрения зависимостей в приложении .NET.

Вы также можете создавать клиентские объекты для определенных контейнеров или объектов BLOB. Дополнительные сведения о создании клиентских объектов и управлении ими см. в статье "Создание клиентских объектов и управление ими", взаимодействующих с ресурсами данных.

Авторизация

Механизм авторизации должен иметь необходимые разрешения для работы с арендой BLOB. Для авторизации с Microsoft Entra ID (рекомендуется) требуется встроенная роль Сотрудник по работе с данными BLOB-объектов хранилища или выше. Дополнительные сведения см. в руководстве по авторизации для Lease Blob (REST API).

Сведения об аренде BLOB-объектов

Аренда создает и управляет блокировкой BLOB для операций записи и удаления. Длительность блокировки может составлять 15–60 секунд либо быть бесконечной. Аренда большого двоичного объекта обеспечивает монопольный доступ на запись и удаление большого двоичного объекта. Чтобы записать в BLOB с активной арендой, клиент должен включить активный арендный идентификатор с запросом на запись.

Дополнительные сведения о состояниях аренды и о том, когда можно выполнить данное действие по аренде, см. в разделе "Состояния аренды" и действия.

Все операции с контейнером разрешены на контейнере, включающем блобы с активной арендой, включая удаление контейнера. Поэтому контейнер может быть удален даже в том случае, если в нем есть активные аренды BLOB-объектов. Используйте операцию "Аренда контейнера", чтобы контролировать права на удаление контейнера.

Операции аренды обрабатываются классом BlobLeaseClient, который предоставляет все операции аренды для блобов и контейнеров. Дополнительные сведения об аренде контейнеров с помощью клиентской библиотеки см. в статье "Создание аренды контейнеров и управление ими с помощью .NET".

Получение аренды

При получении аренды BLOB вы получите идентификатор аренды, который код может использовать, чтобы управлять этим BLOB. Если у BLOB уже есть активное закрепление, вы можете запросить новое закрепление, только используя активный идентификатор закрепления. Однако можно указать новую длительность аренды.

Чтобы получить аренду, создайте экземпляр класса BlobLeaseClient , а затем используйте один из следующих методов:

Следующий пример получает 30-секундную аренду для 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;
}

Продление аренды

Вы можете продлить аренду BLOB, если идентификатор аренды, указанный в запросе, соответствует идентификатору аренды, связанному с этим BLOB. Аренда может быть продлена даже в том случае, если срок его действия истек, если большой двоичный объект не был изменен или арендован еще раз после истечения срока действия этой аренды. При продлении аренды срок ее действия начинается заново.

Чтобы продлить аренду, используйте один из следующих методов в экземпляре BlobLeaseClient :

В следующем примере аренда для 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();
}

Расторжение аренды

Вы можете освободить аренду двоичного большого объекта, если идентификатор аренды, указанный в запросе, соответствует идентификатору аренды, связанному с этим объектом. Освобождение аренды позволяет другому клиенту сразу же после завершения процесса получить аренду для блоба.

Вы можете освободить аренду с помощью одного из следующих методов в экземпляре BlobLeaseClient :

В следующем примере снимается блокировка с битового объекта большого объема (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();
}

Прерывание аренды

Вы можете разорвать аренду объекта BLOB, если у объекта есть активная аренда. Любой авторизованный запрос может расторгнуть аренду; не требуется указывать соответствующий идентификатор аренды. Аренда не может быть продлена после того, как она нарушена, и разрыв аренды предотвращает получение новой аренды в течение определенного периода времени, пока исходная аренда не истекает или не будет освобождена.

Вы можете разорвать договор аренды, используя один из следующих методов в экземпляре BlobLeaseClient:

В следующем примере прерывается аренда 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();
}

Состояния аренды и действия

На следующей схеме показаны пять состояний аренды, а также команды или события, вызывающие изменение состояния аренды.

Схема с состояниями аренды BLOB-объектов и триггерами изменений состояния.

В следующей таблице перечислены пять состояний аренды, краткое описание каждого из них и список действий аренды, разрешенных в заданном состоянии. Эти действия аренды вызывают переходы состояния, как показано на схеме.

Состояние аренды Описание Разрешенные действия по аренде
Доступно Аренда разблокирована и может быть приобретена. acquire
Арендованный Аренда заблокирована. acquire (один и тот же идентификатор аренды), renew, change, releaseи break
Срок действия истек Срок аренды истек. acquire, renew, release и break
Срочно Аренда была нарушена, но аренда будет по-прежнему заблокирована до истечения периода перерыва. release и break.
Неисправно Аренда была нарушена, и срок перерыва истек. acquire, release и break

По истечении срока аренды идентификатор аренды сохраняется службой Blob до тех пор, пока большой двоичный объект не будет изменен или арендован снова. Клиент может попытаться продлить или освободить аренду с помощью идентификатора аренды с истекшим сроком действия. Если эта операция выполнена успешно, клиент знает, что BLOB не был изменен с момента последней актуальности идентификатора аренды. Если запрос завершается ошибкой, клиент знает, что BLOB был изменен или арендован снова с тех пор как аренда была активна в последний раз. Затем клиент должен захватить новый BLOB.

Если срок действия аренды истекает, а не явно освобождается, клиенту может потребоваться подождать до одной минуты, прежде чем будет получена новая аренда для объекта BLOB. Однако клиент может немедленно продлить аренду, используя их идентификатор аренды, если BLOB не был изменен.

Аренда не может быть предоставлена для моментального снимка BLOB-объектов, так как моментальные снимки доступны только для чтения. Запрос на аренду моментального снимка приводит к коду состояния 400 (Bad Request).

Ресурсы

Дополнительные сведения об управлении арендой BLOB-объектов с помощью клиентской библиотеки Хранилище BLOB-объектов Azure для .NET см. в следующих ресурсах.

Примеры кода

Операции REST API

Пакет SDK Azure для .NET содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API через знакомые парадигмы .NET. Методы клиентской библиотеки для управления арендой хранилищ BLOB используют следующую операцию REST API:

Ресурсы клиентской библиотеки

См. также

  • Эта статья является частью руководства разработчика хранилища BLOB-объектов для .NET. Дополнительные сведения см. в полном списке статей руководства разработчика по созданию приложения .NET.