У меня есть приложение для выхода из функций, которое позволяет загружать файл из sftp, обрабатывать его и загружать в хранилище BLOB-объектов. Это приложение функций уже развернуто в azure и работает правильно. Однако, когда я запускаю то же самое из Visual Studio (локально), я получаю ошибку при загрузке файла в хранилище BLOB-объектов.
Microsoft. Azure .Storage.StorageException: этот запрос не авторизован для выполнения этой операции с использованием это разрешение.
Я убедился, что этому приложению назначена необходимая роль участника в учетной записи хранения (поэтому он работает с azure). Есть ли другие параметры, которые мне нужно настроить в локальных настройках или настройках проекта, чтобы эти функции работали так же, как при развертывании в azure? Или могут быть какие-либо настройки в учетной записи хранения, которые переопределяют операции загрузки при запуске из dev, но запускаются только с azure?
Я убедился, что использую локальные настройки, все они скопированы из конфигурации приложения, которая имеет имена учетных записей хранения, строка подключения хранилища больших двоичных объектов, URL-адрес sftp и имя хранилища ключей с учетными данными sft site et c.,
Обновление: Забыл упомянуть, что этот контейнер хранения az Команда загрузки из командной строки с моей машины успешно загрузила файл.
update2: Согласно предложенному мной, я следовал учебнику , и мне удалось создать контейнер, загрузить BLOB-объект и выполнить очистку без ошибок. Затем я объединил код для имитации простого большого двоичного объекта загрузки в поток памяти, который также выдает ошибку
Этот запрос не авторизован для выполнения этой операции с использованием этого разрешения (см. Полный журнал внизу)
Код для загрузки BLOB-объекта:
static async Task TokenCredentialsSample()
{
var tenantId = "xxxxx-xxxx-xxxx-xxxx-xxxxxxxx";
var tokenProvider = new AzureServiceTokenProvider().GetAccessTokenAsync("https://storage.azure.com/",tenantId);
var tokenCredential = new TokenCredential(tokenProvider.Result);
var storageCredentials = new StorageCredentials(tokenCredential);
var uri = new Uri("https://mystorageaccount.blob.core.windows.net/mycontainer/inbound/myfile.csv");
var cloudBlockBlob = new CloudBlockBlob(uri, storageCredentials);
var memoryStream = new MemoryStream();
cloudBlockBlob.DownloadToStream(memoryStream); // Error here
memoryStream.Position = 0;
memoryStream.Close();
}
Я также убедился, что набрал az логин из командной строки, чтобы переключиться, чтобы выбрать правильную подписку, а также выбран аккаунт в параметрах Visual Studio.
Журнал ошибок:
Microsoft. Azure .Storage.StorageException HResult = 0x80131500 Сообщение = Этот запрос не авторизован для выполнения этой операции с использованием это разрешение. Источник = Microsoft. Azure .Storage.Common StackTrace: в Microsoft. Azure .Storage.Core.Executor.Executor.d__1 1.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter
1.GetResult () в Microsoft. Azure .Storage.Core.Executor. Executor. <> C__DisplayClass0_0 1.<ExecuteSync>b__0()
at Microsoft.Azure.Storage.Core.Util.CommonUtility.RunWithoutSynchronizationContext[T](Func
1 actionToRun) в Microsoft. Azure .Storage.Core.Executor.Executor.ExecuteSync [T] (RESTCommand 1 cmd, IRetryPolicy policy, OperationContext operationContext)
at Microsoft.Azure.Storage.Blob.CloudBlob.DownloadRangeToStream(Stream target, Nullable
1 смещение, длина Nullable`1, AccessCondition accessCondition, параметры операции BlobRequestOptions, параметры операции BlobRequestOptions, operationContext) в Microsoft. Azure .Storage.Blob.CloudBlob.DownloadToStream (Цель потока, AccessCondition accessCondition, параметры BlobRequestOptions, OperationContext operationContext) в BlobStorage.Program.d__2.MoveNext () в c: ... \ source \ source \ repos \ BlobStorage \ Program.cs: строка 111 в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача-задача) в System.Runtime.CompilerServices.Service-задача-запрос-приемник (для задачи). в System.Runtime.CompilerServices.TaskAwaiter.GetResult () в Bl obStorage.Program.d__0.MoveNext () в c: ... \ source \ repos \ BlobStorage \ Program.cs: строка 19
Это исключение было изначально сгенерировано в этом стеке вызовов: Microsoft. Azure .Storage.Core.Executor.Executor.ExecuteAsyn c (Microsoft. Azure .Storage.Core.Executor.RESTCommand, Microsoft. Azure .Storage.RetryPolicies.IRetryPolicy, Microsoft. Azure .Storage.OperationContext , System.Threading.CancellationToken) System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task) System.Runtime. Tasks.Task) System.Runtime.CompilerServices.TaskAwaiter.GetResult () Microsoft. Azure .Storage.Core.Executor. Executor.ExecuteSyn c .AnonymousMethod__0 () Microsoft. Azure .Storage.Core.Util.CommonUtility.RunWithoutSynchronizationContext (System.Fun c) Microsoft. Azure .Storage.Core.Executor.Executor.Ex64teSynx * (Microsoft. Azure .Storage.Core.Executor.RESTCommand, Microsoft. Azure .Storage.RetryPolicies.IRetryPolicy, Microsoft. Azure .Storage.OperationContext) Microsoft. Azure .Storage.Blob.CloudBlob. DownloadRangeToStream (System.IO.Stream, long ?, long ?, Microsoft. Azure .Storage.AccessCondition, Microsoft. Azure .Storage.Blob.BlobRequestOptions, Microsoft. Azure .Storage.OperationContext) Microsoft. Azure .Storage.Blob.CloudBlob.DownloadToStream (System.IO.Stream, Microsoft. Azure .Storage.AccessCondition, Microsoft. Azure .Storage.Blob.BlobRequestOptions, Microsoft. Azure .Storage.OperationContext) .. . [Стек вызовов сокращен]