Функция Activity должна возвращать IEnumerable <IListBlobItem> - PullRequest
0 голосов
/ 09 ноября 2019

У меня есть функция активности, которая должна возвращать 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?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2019

Это потому, что у вас есть список Интерфейса, который определенно не может быть инициализирован. Вы можете создать новый класс, реализующий IListofBobItems, а затем вернуть список вновь созданного класса из метода GetbobList

0 голосов
/ 09 ноября 2019

Измените его на List и посмотрите,

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

однако вы можете исправить вышеуказанную ошибку, изменив BLOB-объекты на тип var.

...