Как получить в аренду файл хранилища Azure?

У меня есть веб-приложение с несколькими экземплярами в лазурном облаке. Я хочу убедиться, что только один из них читает и обрабатывает файл из файла хранилища Azure. Я думал, что, используя вариант аренды, я могу это сделать.

Однако я не могу найти подходящие методы для этой операции. Я нашел этот параметр REST API, но я ищу для чего-то например это.

В этом примере показано хранилище BLOB-объектов. Какие есть варианты хранения файлов? Я использую последнее хранилище файлов nuget.

РЕДАКТИРОВАТЬ:

Вот как я получаю данные из файла хранилища и обрабатываю данные.

    var storageAccount = CloudStorageAccount.Parse("FileStorageConnectionString");
    var fileClient = storageAccount.CreateCloudFileClient();
    var share = fileClient.GetShareReference("StorageFileShareName");
    var file = this.share.GetRootDirectoryReference().GetFileReference("file.txt");
---processing file and renaming the file after processing---

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


person PSR    schedule 06.05.2020    source источник


Ответы (1)


Пожалуйста, попробуйте что-то вроде ниже:

        string connectionString = "DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>;EndpointSuffix=core.windows.net;";
        var shareClient = new ShareClient(connectionString, "test");
        shareClient.CreateIfNotExists();
        var fileClient = shareClient.GetRootDirectoryClient().GetFileClient("test.txt");
        var bytes = Encoding.UTF8.GetBytes("This is a test");
        fileClient.Create(bytes.Length);
        fileClient.Upload(new MemoryStream(bytes));
        var leaseClient = fileClient.GetShareLeaseClient();
        Console.WriteLine("Acquiring lease...");
        var leaseId = leaseClient.Acquire();
        Console.WriteLine("Lease Id: " + leaseId);
        Console.WriteLine("Breaking lease...");
        leaseClient.Break();
        Console.WriteLine("Lease broken...");

Он использует пакет Nuget Azure.Storage.Files.Shares.

person Gaurav Mantri    schedule 06.05.2020
comment
Я получаю доступ к файлу с помощью экземпляра CloudFileClient и могу получить данные и обработать их. Почему я не могу получить аренду таким образом? Добавлен код для справки в моем исходном вопросе. - person PSR; 07.05.2020
comment
CloudFileClient является частью старого пакета SDK, ориентированного на более старую версию REST API, тогда как функциональность File Lease объявлена ​​в новой версии REST API. По этой причине вы не можете использовать CloudFileClient. - person Gaurav Mantri; 07.05.2020
comment
Мое приложение нацелено на .NET4.6.2, и я использую версию Microsoft.Azure.Storage.File 11.1.3. Вместо этого я должен использовать пакет Storage.Files.Shares для чтения и аренды файла хранилища Azure? - person PSR; 07.05.2020
comment
Подожди секунду. Позвольте мне взглянуть на пакет Microsoft.Azure.Storage.File 11.1.3. Это должно иметь поддержку аренды файлов по этой ссылке: docs.microsoft.com/en-us/rest/api/storageservices/. - person Gaurav Mantri; 07.05.2020
comment
Я просмотрел этот SDK и, к сожалению, не смог найти там никакой информации, связанной с арендой. Вы можете открыть проблему здесь: github.com/Azure/azure-storage- сеть/вопросы. SDK версии 11 и 12 кардинально отличаются друг от друга, поэтому вы должны оценить, имеет ли для вас смысл обновление версии SDK только для получения аренды. - person Gaurav Mantri; 07.05.2020
comment
Другой альтернативой может быть простое создание URL-адреса SAS для файла и непосредственное использование REST API. - person Gaurav Mantri; 07.05.2020
comment
Спасибо за предложение. Обновление до 12 не проблема для нас, если нам не нужно менять версию фреймворка (NET462). Также полезно знать вариант SAS. Итак, если мы перейдем к SDK 12, я должен использовать пакет Storage.Files.Shares, верно? - person PSR; 07.05.2020
comment