У меня есть простое веб-задание, которое использует servicebus:
public async Task ProcessQueueMessage([ServiceBusTrigger("asset-updates-in")] BrokeredMessage message,
ILogger log)
{
log.LogInformation("Running job");
log.LogInformation("GotMessage"+ message.ContentType);
Сообщение отправлено командой Biztalk, имеет тип MIME 'text / xml' и выглядит так:
<gip:GetDeviceUpdateResult xmlns:gip="http://schemas.ores.net/customer/breakdown-manager/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<gip:Event>
<gip:Id>5886</gip:Id>
<gip:Action>Upsert</gip:Action>
<gip:Timestamp>2019-09-20T13:35:40</gip:Timestamp>
</gip:Event>
<gip:Cabin>
<gip:Id>5001874</gip:Id>
<gip:BusinessId>029843</gip:BusinessId>
<gip:Name>RUE DE LANDEN TEST 2</gip:Name>
<gip:DistrictId>1590</gip:DistrictId>
</gip:Cabin>
</gip:GetDeviceUpdateResult>
Как только мой webjob получает сообщение, у меня появляется эта ошибка:
Microsoft.Azure.WebJobs.Host.FunctionInvocationException: исключение при выполнении функции: UpdateFunctions.ProcessQueueMessage ---> System.InvalidOperationException: Exceptionпараметр привязки 'message' ---> System.InvalidOperationException: Привязка параметров к сложным объектам (таким как 'BrokeredMessage') использует сериализацию Json.NET или сериализацию объектов XML.
- Если ContentType равен 'application /json 'десериализовать как JSON
- Если ContentType не является' application / json ', попытка десериализации с помощью Message.GetBody, которая будет обрабатывать такие случаи, как сериализация объектов XML
- Если эта десериализация завершится неудачно, выполните финальнуюпопытка десериализации JSON для обнаружения случаев, когда тип содержимого может быть неправильным
Сбой синтаксического анализатора JSON: при анализе значения обнаружен неожиданный символ:?.Путь '', строка 0, позиция 0.
Так что, похоже, используется парсер json, когда данные в формате xml: ... 1023 *
Если я изменю свою веб-работу следующим образом:
public async Task ProcessQueueMessage([ServiceBusTrigger("asset-updates-in")] string message,
ILogger log)
{
log.LogInformation("Running job");
log.LogInformation("GotMessage"+ message);
Я получаю:
[09/20/2019 11:38:43 > da4c4f: INFO] GotMessage<?xml version="1.0" encoding="utf-8"?><gip:GetDeviceUpdateResult xmlns:gip="http://schemas.ores.net/customer/breakdown-manager/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><gip:Event><gip:Id>5889</gip:Id><gip:Action>Upsert</gip:Action><gip:Timestamp>2019-09-20T13:38:11</gip:Timestamp></gip:Event><gip:Cabin><gip:Id>5001874</gip:Id><gip:BusinessId>029843</gip:BusinessId><gip:Name>RUE DE LANDEN</gip:Name><gip:DistrictId>1590</gip:DistrictId></gip:Cabin></gip:GetDeviceUpdateResult>
[09/20/2019 11:38:43 > da4c4f: INFO] info: Function.ProcessQueueMessage[0]
Я думаю, что могу десериализовать себя, но это немного воняет ... Я что-то упускаю?
Спасибо!