После обновления NServiceBus до последней версии, выпущенной на прошлой неделе (которая также имеет новую реализацию), я вижу странные ошибки при отправке json из клиента.NServiceBus Обработчик метаданных метаданных
Я пошлю сообщение от клиента и приемника отображает это сообщение:
2016-10-18 22: 16: 33,612 INFO MFG.Receiver.DeviceHandler Got сообщение с идентификатором: a222b136-6a4e- 474e-8012-cc1c24e5e539
у меня есть точки останова в моей обработчик, ниже, и он показывает объект сообщения выпекают и не должно быть никаких проблем.
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.");
}
}
Когда она попадает метод ответа в конце концов, он бросает следующие ошибки:
2016-10-18 22: 16: 33,666 INFO NServiceBus.RecoverabilityExecutor Немедленное Retry собирается повторить сообщение 'a222b136-6a4e-474e-8012-cc1c24e5e539' из-за исключения: System.Exception: Не удалось найти метаданные для 'System.String'. Обеспечьте следующее: 1. В начальное сканирование входит «System.String». 2. «System.String» реализует «IMessage», «IEvent» или «ICommand» или, альтернативно, если вы не хотите реализовывать интерфейс, вы можете использовать «Unobtrusive Mode». в NServiceBus.Unicast.Messages.MessageMetadataRegistry.GetMessageMetadata (тип MessageType) в C: \ Постройте \ SRC \ NServiceBus.Core \ Unicast \ Сообщения \ MessageMetadataRegistry.cs: строка 39
Я не уверен, почему это бы бросить ошибку System.String
, после того, как он уже получил сообщение от обработчика и свойства заполняются ...
послал JSON выглядит следующим образом:
{
"$type": "DeviceRequest, MFG.Domain",
"Id": "devices-65",
"DeviceId": 1,
"Location": "Orlando",
"DeviceType": "test"
}
Мой Sender (клиент) выглядит следующим образом:
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 'в ошибку «ошибка», потому что обработка завершилась неудачно из-за исключения: NServiceBus.MessageDeserializationException: Произошла ошибка при попытке извлечь логические сообщения из транспортного сообщения 6405179d-ea36-4264-af2a-704da19af120 ---> System.Exception: Не удалось найти метаданные для «Newtonsoft.Json.Linq.JObject».
Я понятия не имею, что мне здесь не хватает, и это не проблема с предыдущей версией. Это ошибка или ...?
Да, я заметил это утром после того, как я разместил вопрос. Это 100% проблема. Я мог бы поклясться, что смог просто передать нитку в какой-то момент. Спасибо, что ответили; надеюсь, поможет кому-то еще по линии. – ragerory