MassTransit不使用XmlDeserializer

时间:2017-11-15 14:05:00

标签: .net-core masstransit

MassTransit.RabbitMQ 4.0.0.1334-在netcoreapp2.0上开发

即使传入消息的content_type为application/vnd.masstransit+xml,MassTransit仍然会尝试使用JsonDeserializer。我的假设(可能是错误的)是MassTransit将根据传入的 content_type 标头使用正确的反序列化器。

注意:我正在测试中,直接在RabbitMQ管理控制台中向交换机发送消息。

错误是:

MT-Reason:  fault
MT-Fault-Message:   Unexpected character encountered while parsing value: <. Path '', line 0, position 0.
MT-Fault-Timestamp: 2017-11-14T22:28:23.9008730Z
MT-Fault-StackTrace:    at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonReader.ReadForType(JsonContract contract, Boolean hasConverter)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
at Newtonsoft.Json.JsonSerializer.Deserialize[T](JsonReader reader)
at MassTransit.Serialization.JsonMessageDeserializer.MassTransit.IMessageDeserializer.Deserialize(ReceiveContext receiveContext)

我已使用以下代码配置了我的接收端点(来自Castle Windsor容器):

sbc.ReceiveEndpoint(host, "my-consumer", ep =>
{
  ep.UseMessageScope();
  ep.LoadFrom(container);
});

我尝试过的其他内容:

1

ep.UseXmlSerializer();

2

ep.AddEndpointSpecification(new SupportMessageDeserializerReceiveEndpointSpecification(XmlMessageSerializer.XmlContentType, () => new XmlMessageDeserializer(XmlMessageSerializer.XmlSerializer)));

3

ep.AddEndpointSpecification(new SupportMessageDeserializerReceiveEndpointSpecification(XmlMessageSerializer.XmlContentType, () => new XmlMessageDeserializer(JsonMessageSerializer.Deserializer)));

4

sbc.UseXmlSerializer();

这些似乎都没有任何影响。

1 个答案:

答案 0 :(得分:1)

简单 - MassTransit不使用content_type的标准RabbitMq 属性,而是使用名为Content-Type

标题