Получение необработанных данных из триггера служебной шины

#c# #azure-functions #azureservicebus

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

Вопрос:

Я пытаюсь создать функцию Azure для обработки сообщений Dynamics 365 из служебной шины Azure. Сообщение сериализуется в двоичном формате XML .NET, поэтому я пытаюсь получить сообщение как двоичное и десериализовать его в своем коде.

Сигнатура моего метода функции:

 public static void Run(
    [ServiceBusTrigger("queue", Connection = "...")] byte[] message,
    ILogger log,
    MessageReceiver messageReceiver)
 

Однако время выполнения функций по-прежнему завершается сбоем при попытке проанализировать сообщение, так как я получаю следующую ошибку:

The Message with ContentType 'application/msbin1' failed to deserialize to a string with the message: 'Expecting element 'string' from namespace 'http://schemas.microsoft.com/2003/10/Serialization/'.. Encountered 'Element' with name 'RemoteExecutionContext', namespace 'http://schemas.microsoft.com/xrm/2011/Contracts'.'. System.Private.DataContractSerialization: Expecting element 'string' from namespace 'http://schemas.microsoft.com/2003/10/Serialization/'.. Encountered 'Element' with name 'RemoteExecutionContext', namespace 'http://schemas.microsoft.com/xrm/2011/Contracts'.

Как я могу получить необработанные данные с помощью ServiceBusTrigger ?

РЕДАКТИРОВАТЬ 1: та же ошибка возникает с

 public static void Run(
    [ServiceBusTrigger("queue", Connection = "...")] Message message,
    ILogger log)
 

Я использую следующие версии Microsoft.Azure.WebJobs.Extensions.ServiceBus 4.1.0 и Microsoft.NET.Sdk.Functions 3.0.7 .

РЕДАКТИРОВАТЬ 2:
обновлены версии до Microsoft.Azure.WebJobs.Extensions.ServiceBus 4.1.1 и Microsoft.NET.Sdk.Functions 3.0.11 ошибка исчезла, но длина сообщения составляет 0 байт для обоих byte[] и Message.Content

РЕДАКТИРОВАТЬ 3:

 Azure Functions Core Tools
Core Tools Version:       3.0.3160 Commit hash: 00aa7f43cc5c5f15241b5e6e5363256f19ceb990
Function Runtime Version: 3.0.14916.0
 

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

1. Если вы установите тип Message вместо byte[] , вы получите ту же ошибку? Massage.Body свойство должно содержать массив байтов, но избегайте того, чтобы функции пытались получить доступ к сообщению, поскольку, похоже, у него возникли проблемы с этим. Также было бы полезно убедиться, что Functions SDK обновлен, и поделиться этим номером версии, если вы можете — если это последняя версия, которая поможет устранить проблему.

Ответ №1:

ContentType должно быть application/json . Подробности смотрите в этом выпуске GitHub.

Ответ №2:

Убедитесь, что формат вашего сообщения — JSON, а НЕ .NETBinary

введите описание изображения здесь