azure - 如何使用异步方法从 Azure 函数中的存储读取
问题描述
我已经创建了一个 Azure V2 函数,我想从将 CSV-blob 转换为 JSON 的逻辑应用程序中调用它。此方法在 VS 中本地运行并从浏览器调用它时工作正常,但部署它并从 Logic App 调用它什么都不做。
它永远不会向逻辑应用返回任何内容。Logic 应用重试多次,然后失败。
调试它显示它调用 DownloadTextAsync ,然后在一段时间后调试器再次捕获重试,然后一次又一次。
我试图用谷歌搜索并找到一些关于死锁的文章,尽管没有可能被阻止的 UI 并试图将其更改为:
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")); 等待 jsonBlob.UploadTextAsync(内容);
在本地运行它会创建一个新的 blob,但从逻辑应用程序运行它不会,因此由于某种原因,如果从逻辑应用程序调用读取调用永远不会返回到函数
解决方案
问题不在于代码,而在于拼写错误的设置值。
推荐阅读
- javascript - 不上传文件到服务器,可以用JS查看和打印文件吗?
- makefile - Make不应该重建深度依赖
- django - 使用过滤器查询在 Django 中找不到页面错误 {return Post.objects.filter(published_date__lte=timezone.now()).order_by('-published_date')}
- c++ - 将 VS2010 项目从 32 位转换为 64 位时的 LNK2022
- mask - 在 Google 地球引擎中,如何从一个图像集合中选择与另一个图像集合中的选定像素值相对应的像素?
- javascript - 悬停在一条路径上时是否可以启动所有 SVG 关键帧动画?
- c# - Windows 运行时组件 C++ 结构/类返回到 UWP
- oracle - 无法过滤空日期时间值
- reactjs - 如何以可重用的方式为我的 material-ui 表创建选择过滤器?
- rabbitmq - RabbitMQ 保证传递到镜像队列