C# NServiceBus处理程序引发元数据错误

C# NServiceBus处理程序引发元数据错误,c#,.net,json,rabbitmq,nservicebus,C#,.net,Json,Rabbitmq,Nservicebus,在将NServiceBus更新到上周发布的最新版本(也有一个新的实现)之后,我在从客户端发送json时看到了奇怪的错误 我将从客户端发送一条消息,接收者显示此消息: 2016-10-18 22:16:33.612 INFO MFG.Receiver.DeviceHandler收到id为a222b136-6a4e-474e-8012-CC1C24E539的消息 我在下面的处理程序中有一个断点,它显示消息对象已烘焙,应该没有任何问题 public class DeviceHandler : IHan

在将NServiceBus更新到上周发布的最新版本(也有一个新的实现)之后,我在从客户端发送json时看到了奇怪的错误

我将从客户端发送一条消息,接收者显示此消息:

2016-10-18 22:16:33.612 INFO MFG.Receiver.DeviceHandler收到id为a222b136-6a4e-474e-8012-CC1C24E539的消息

我在下面的处理程序中有一个断点,它显示消息对象已烘焙,应该没有任何问题

public class DeviceHandler : IHandleMessages<DeviceRequest>
{
    private readonly IDeviceProvider _provider = new DeviceProvider();
    private static readonly ILog Log = LogManager.GetLogger<DeviceHandler>();

    public Task Handle(DeviceRequest message, IMessageHandlerContext context)
    {
        Log.Info($"Got message with id: {context.MessageId}");
        ...
        return context.SendLocal($"Message with Id {context.MessageId} received.");
    }
}
我的发件人(客户端)如下所示:

{
  "$type": "DeviceRequest, MFG.Domain",
  "Id": "devices-65",
  "DeviceId": 1,
  "Location": "Orlando",
  "DeviceType": "test"
}
static void Main()
{
    ...
        using (var channel = connection.CreateModel())
        {
            var messageId = Guid.NewGuid().ToString();
            var properties = channel.CreateBasicProperties();
            properties.MessageId = messageId;

            var payload = GenerateJsonPayload();

            channel.BasicPublish(string.Empty, ServerEndpointName, false, properties, Encoding.UTF8.GetBytes(payload));
            Console.WriteLine($"Message with id {messageId} sent to queue.");
        }
     ...
}

public static string GenerateJsonPayload()
{
    var obj = new DeviceRequest
    {
        DeviceId = 1,
        DeviceType = "test",
        Location = "Orlando"
    };

    var settings = new JsonSerializerSettings
    {
        TypeNameHandling = TypeNameHandling.All
    };

    var result = JsonConvert.SerializeObject(obj, Formatting.Indented, settings);

    return result;
}
我以前遇到过“找不到元数据”的问题,这是由于json格式错误或没有类型。如果我删除了
JsonSerializerSettings
,并且只传递了一个序列化对象,则会出现以下错误:

2016-10-18 22:31:27.698错误NServiceBus.RecoverabilityExecutor将消息“6405179d-ea36-4264-af2a-704da19af120”移动到错误队列“ERROR”,因为异常导致处理失败: NServiceBus.MessageDeserializationException:尝试从传输消息6405179d-ea36-4264-af2a-704da19af120-->系统提取逻辑消息时出错。异常:找不到“Newtonsoft.Json.Linq.JObject”的元数据


我不知道我在这里遗漏了什么,这与以前的版本无关。这是虫子还是

为您的
SendLocal
操作使用具体的消息类型


作为处理正在执行的消息的一部分,
return context.SendLocal($“Id为{context.MessageId}的消息已接收”)。这将尝试向本地队列发送“string”类型的消息。NServiceBus告诉您,没有为“string”消息类型注册任何消息元数据。因此,它无法构造消息并抛出异常。

是的,我在发布问题的第二天早上注意到了这一点。你是100%的,这就是问题所在。我可以发誓我可以在一个点上传递一个字符串。谢谢你的回答;希望在这方面也能帮助其他人。