Как читать из хранилища в функции Azure с помощью асинхронных методов - PullRequest
0 голосов
/ 08 февраля 2019

Я создал функцию Azure V2, которую хочу вызвать из приложения логики, которое преобразует CSV-объект в JSON.Этот метод отлично работает, когда он запускается локально в VS и вызывается из браузера, но его развертывание и вызов из приложения логики ничего не делают.

Он никогда ничего не возвращает в приложение логики.Приложение логики повторяет попытки несколько раз, а затем завершается неудачей.

При отладке оно показывает, что оно вызывает DownloadTextAsync, а затем через некоторое время отладчик снова ловит при повторных попытках, а затем снова и снова.

Iпопытался отыскать это и нашел несколько статей о взаимоблокировках, хотя нет никакого пользовательского интерфейса, который мог бы быть заблокирован, и попытался изменить его на:

var content = await blob.DownloadTextAsync().ConfigureAwait(false);

Я также попытался сделать функцию синхронизированной и вызвать:

var content = blob.DownloadTextAsync().Result;

но ни один не работал.Что случилось?

    [FunctionName("ConvertCSVToJSON")]
    public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequest req, ILogger log)
    {
        var containerName = GetEnvironmentVariable("RawDataStorageContainerName");
        var blobName = query["Path"];
        var accountName = GetEnvironmentVariable("BlobDataStorageAccountName");
        var accessKey = GetEnvironmentVariable("BlobDataStorageAccountAccessKey");
        var connectionString = "DefaultEndpointsProtocol=https;AccountName=" + accountName + ";AccountKey=" + accessKey + ";EndpointSuffix=core.windows.net";
        var storage = CloudStorageAccount.Parse(connectionString);
        var client = storage.CreateCloudBlobClient();
        var container = client.GetContainerReference(containerName);
        CloudBlockBlob blob = container.GetBlockBlobReference(blobName);

        var content = await blob.DownloadTextAsync();
        var json = ConvertCsvToJsonObject(content);

        return (ActionResult)new OkObjectResult($"{json}");
    }

РЕДАКТИРОВАТЬ: Я также пытался добавить этот код:
CloudBlockBlob jsonBlob = container.GetBlockBlobReference (blobName.Replace ("csv", "json"));await jsonBlob.UploadTextAsync (content);

при его локальном запуске создает новый BLOB-объект, но при запуске его из приложения логики нет, поэтому по какой-то причине вызов read никогда не возвращается в функцию, если вызывается из приложения логики

1 Ответ

0 голосов
/ 08 февраля 2019

Проблема была не в коде, а в значении с ошибкой.

...