Функция Azure с привязкой ввода больших двоичных объектов, которая ссылается на местоположение больших двоичных объектов в сообщении json из триггера служебной шины

#azure-functions #azureservicebus

#azure-функции #azureservicebus

Вопрос:

Я реализую шаблон проверки утверждений с помощью функций Azure и служебной шины Azure.

Моя функция Azure имеет ServiceBusTrigger , которая работает корректно сама по себе.

 public async Task Run(
    [ServiceBusTrigger("worker", Connection = "SERVICE_BUS_CONNECTION")] string json,
    ILogger log)
{
    var notificationCommand = JsonConvert.DeserializeObject<NotificationCommand>(json, new JsonNotificationCommandConverter());
  

Сериализованные сообщения проверки утверждений из шины выглядят примерно так:

 {
    "type": "claim-check",
    "product": "XYZ", 
    "payloadRef": "https://{storage-account}/{container}/{blob_id}"
}
  

Я хотел бы иметь возможность просто использовать Blob привязку ввода для получения ссылки на полезную нагрузку из хранилища больших двоичных объектов без необходимости делать это вручную, но у меня возникли некоторые проблемы с выражениями привязки — я даже не уверен, возможно ли сделать то, что я пытаюсь…

В принципе, я хочу сделать следующее:

 public async Task Run(
    [ServiceBusTrigger("worker", Connection = "SERVICE_BUS_CONNECTION")] string json,
    [Blob("{PayloadReference}", FileAccess.Read, Connection = "BLOB_STORAGE_CONNECTION")] Stream myBlob,
    ILogger log)
{
    var notificationCommand = JsonConvert.DeserializeObject<NotificationCommand>(json, new JsonNotificationCommandConverter());
  

где Blob("{PayloadReference}" ссылается на свойство в сообщении json из шины.

Возможно ли это? и если да, то как мне это сделать…

Комментарии:

1. В примерах атрибутов больших двоичных объектов отображается только «{контейнер} / {blob_id}». Они не показывают примеры, в которых предоставляется полный uri.

2. Не уверен, что это опечатка или даже уместно, но я заметил, что привязка имеет «PayloadReference», но поле полезной нагрузки короче «payloadRef» и отличается регистром.

Ответ №1:

C # использует шаблон императивной привязки, в отличие от декларативных привязок в function.json. Таким образом, вы не можете ввести json и сообщить вашей выходной привязке или входной привязке значение формата json.

Вы можете вручную считывать значение из очереди служебной шины или темы (из вашего триггера служебной шины) и использовать C # SDK для azure для отправки выходных данных по нужному пути к большим двоичным объектам.