活动函数应返回IEnumerable <IListBlobItem>

时间:2019-11-09 14:29:20

标签: c# azure azure-functions ienumerable azure-durable-functions

我有一个活动函数,应该返回一个IEnumerable<IListBlobItem>,如下所示:

[FunctionName("process_file_GetBlobList")]
public static IEnumerable<IListBlobItem> GetBlobList([ActivityTrigger] string name, ILogger log)
{
    string storageConnectionString = @"connstring";
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString);
    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
    CloudBlobContainer container = blobClient.GetContainerReference("container");
    IEnumerable<IListBlobItem> blobs = new IListBlobItem[0];

    foreach (IListBlobItem blobItem in container.ListBlobs())
    {
        if (blobItem is CloudBlobDirectory)
        {
            CloudBlobDirectory directory = (CloudBlobDirectory)blobItem;
            blobs = directory.ListBlobs(true);
        }
    }

    return blobs;
}

在我的Orchestrator中,我按以下方式调用此活动函数:

 IEnumerable<IListBlobItem> blobs = await context.CallActivityAsync<IEnumerable<IListBlobItem>>("process_file_GetBlobList", null);

通过调试我没有收到任何错误消息,但是在运行时我得到了以下消息:

  

失败:无法创建类型的实例   Microsoft.Azure.Storage.Blob.IListBlobItem。类型是接口还是   抽象类,不能实例化。路径   '[0] .StreamWriteSizeInBytes'

有什么想法,如何通过CallActivityAsync调用我的活动函数?

3 个答案:

答案 0 :(得分:0)

将其更改为列表并查看,

  List<ListBlobItem> blobs = await context.CallActivityAsync<List<ListBlobItem>>("process_file_GetBlobList", null);

但是,您可以通过将blob更改为var来解决上述错误。

答案 1 :(得分:0)

那是因为您拥有明确无法初始化的Interface列表。您可以创建一个实现IListofBobItems的新类,然后从GetbobList方法返回新创建的类的列表

答案 2 :(得分:0)

我认为{% for ad in ads %} ... <a class="btn" onclick="showNumber()" id="showNumber"><span class="fa fa-phone"></span> View Phone Number</a> <input id="phonenum" style="display: none;" type="text" value="{{ ad.user.phone }}"> ... {% endfor %} 行需要重写。尝试<script type="text/javascript"> function showNumber() { document.getElementById('showNumber').innerHTML = document.getElementById('phonenum').value; } </script>