Как вернуть поток из функции Azure? - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь написать функцию Azure v2, используя ядро ​​dotnet как часть долговременной функции. Я хочу создать функцию активности, которая читает файл из хранилища BLOB-объектов, расшифровывает его и возвращает расшифрованный поток байтов. Я могу создать расшифрованный поток, и я пытаюсь вернуть поток следующим образом:

[FunctionName("Decrypt")]
public static async Task<IActionResult> Run(
    [ActivityTrigger] string blobName,
    ILogger log,
    ExecutionContext context)
{
    // get stream from blob storage

    var bytes = await GetDecryptedByteArrayAsync(blobStream);
    return new FileContentResult(bytes, "application/octet-stream");
}

Это похоже на работу, но когда я пытаюсь прочитать ответ, как это:

        var provisioningArchive = await
            ctx.CallActivityAsync<FileContentResult>("Decrypt", encryptedBlobName);

Я получаю следующее исключение:

Newtonsoft.Json.JsonSerializationException: невозможно найти конструктор для использования для типа Microsoft.AspNetCore.Mvc.FileContentResult. Класс должен иметь конструктор по умолчанию, один конструктор с аргументами или конструктор, помеченный JsonConstructor

Как я могу получить это для десериализации в объект, который представляет поток?

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Я не думаю, что можно вернуть Stream в контекст Orchestration, поскольку в документации Bindings сказано, что возвращаемые значения должны быть сериализуемыми в JSON:

Возвращаемые значения - Возвращаемые значения сериализуются в JSON и сохраняются в таблице истории оркестровки в хранилище таблиц Azure. Эти возвращаемые значения могут быть запрошены привязкой клиента оркестровки, описанной ниже.

Я обошел это, создав Dto, чтобы обернуть необработанный байтовый массив:

public class StreamDto
{
    public string Name { get; set; }
    public byte[] Contents { get; set; }
}

и верните это вместо. Поскольку он сериализуем для Json, я могу передавать его туда и обратно и воссоздавать поток в функции Activity.

0 голосов
/ 15 января 2019

Если вы возвращаете новый FileStreamResult?

https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.filestreamresult.-ctor?view=aspnetcore-2.2

Если вы используете JSON.NET, у него есть такая возможность ... https://www.newtonsoft.com/json/help/html/DeserializeWithJsonSerializerFromFile.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...