Функции Azure: как использовать POCO в выражении привязки с очередью хранилища Azure?

У меня определена функция Azure, которая использует триггер очереди хранилища Azure и входные привязки больших двоичных объектов. У меня есть POCO для триггера очереди, но как я могу использовать этот POCO с выражением привязки во входной привязке большого двоичного объекта?

Архитектура:

  1. Функции Azure 2.x
  2. Предварительно скомпилированная библиотека C # (.NET Core 2.1)

POCO:

public class ImageToProcess
{
    public int CompanyId { get; set; }
    public string FullImagePath { get; set; }
}

Функция Azure:

public static void Run(
    [QueueTrigger("profile-image-queue", Connection = "ProfileImageQueue")]ImageToProcess myQueueItem,
    [Blob("profileimages/{queueTrigger.FullImagePath}", FileAccess.Read, Connection = "ProfileImageBlobConnectionString")] Stream originalImage,
    ILogger log)
{
    log.LogInformation($"Started Processing profile image: myQueueItem");
}

Сообщение в очереди:

{ 
    "CompanyId": 123,
    "FullImagePath": "CompanyA/profileImage-original.png" 
}

Сообщение об ошибке:

System.Private.CoreLib: исключение при выполнении функции: ProfileImageUploaded. Microsoft.Azure.WebJobs.Host: параметр привязки исключения 'originalImage'. Microsoft.Azure.WebJobs.Host: ошибка при доступе к FullImagePath: свойство не существует.

Ресурсы, использованные для создания этого решения

  1. http://dontcodetired.com/blog/post/Improving-Azure-Functions-Blob-Trigger-Performance-and-Reliability-Part-2-Processing-Delays-and-Missed-Blobs
  2. https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-queue#trigger.
  3. https://docs.microsoft.com/en-us/sandbox/functions-recipes/queue-storage#azure-storage-queue-trigger-using-a-poco

Другое возможное решение. Я вижу только один вариант - использовать императивные привязки, но я почти уверен, что могу использовать декларативные. https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-class-library#binding-at-runtime


person Mike Becatti    schedule 04.10.2019    source источник
comment
используйте следующее: profileimages / {FullImagePath} или {FullImagePath} в случае URL-адреса   -  person Roman Kiss    schedule 04.10.2019
comment
@RomanKiss - это исправлено, но как функция узнает, что свойство взято из метаданных QueueTrigger, а не из какого-либо другого свойства метаданных? docs. microsoft.com/en-us/azure/azure-functions/   -  person Mike Becatti    schedule 04.10.2019
comment
@RomanKiss - Подумав об этом, я предполагаю, что компилятор предполагает, что вы пытаетесь сослаться на свойство в метаданных queueTrigger, потому что на другие свойства метаданных вы должны ссылаться по имени? В любом случае, если вы добавите свой ответ в мой пост, я его приму.   -  person Mike Becatti    schedule 04.10.2019
comment
взгляните на docs.microsoft.com / en-us / azure / azure-functions /, также он основан на метаданных триггера, например HttpTrigger будет касаться строки запроса, заголовков. и т. д., поэтому тогда {query.myid}, {headers.myid} и т. д.   -  person Roman Kiss    schedule 04.10.2019
comment
@RomanKiss - Да, это утверждение под полезными нагрузками JSON подтверждает ваш ответ. Обратите внимание, что входная привязка Blob получает имя большого двоичного объекта путем прямой ссылки на свойство BlobName (path: strings / {BlobName}) Спасибо!   -  person Mike Becatti    schedule 04.10.2019


Ответы (1)


используйте следующее в привязке Blob:

"profileimages/{FullImagePath}" 

Обратите внимание: если FullImagePath представляет собой URL-адрес, то:

"{FullImagePath}" 
person Roman Kiss    schedule 04.10.2019
comment
Вот документация для этого: Полезные данные JSON - person Reyhn; 02.11.2020