Я создал функцию 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 никогда не возвращается в функцию, если вызывается из приложения логики