【发布时间】:2019-09-23 15:58:17
【问题描述】:
我有一个使用服务总线的简单网络作业:
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>
只要我的网络作业收到消息,我就会出现此错误:
Microsoft.Azure.WebJobs.Host.FunctionInvocationException:异常 执行函数时:UpdateFunctions.ProcessQueueMessage ---> System.InvalidOperationException:异常绑定参数 'message' ---> System.InvalidOperationException:将参数绑定到 复杂对象(例如“BrokeredMessage”)使用 Json.NET 序列化或 XML 对象序列化。
- 如果 ContentType 为 'application/json' 则反序列化为 JSON
- 如果 ContentType 不是 'application/json' 尝试使用 Message.GetBody 进行反序列化,这将处理 XML 对象等情况 序列化
- 如果此反序列化失败,请最后尝试 JSON 反序列化以捕获内容类型可能为 不正确
JSON 解析器失败:解析时遇到意外字符 价值: ?。路径'',第 0 行,第 0 位置。
所以似乎在数据是 xml fromat 时使用 json 解析器...
如果我这样改变我的网络工作:
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]
我想我可以反序列化自己,但它有点臭......我错过了什么?
谢谢!
【问题讨论】:
标签: c# azure-webjobs