NServiceBus를 지난 주 출시 된 최신 버전 (새 구현 포함)으로 업데이트 한 후 클라이언트에서 json을 보낼 때 이상한 오류가 표시됩니다.NServiceBus 처리기에서 메타 데이터 오류 발생
나는 클라이언트와 수신기의 디스플레이에서이 메시지 메시지를 보내드립니다 :
2016년 10월 18일 22 : 16 : ID로 33.612 정보 MFG.Receiver.DeviceHandler있어 메시지 : a222b136-6a4e-를 474e-8012-cc1c24e5e539
아래의 처리기에 중단 점이 있으며 메시지 개체가 구워지고 아무런 문제가 없어야 함을 보여줍니다. 16 :
2016년 10월 18일 22
이 : 33.666 정보 NServiceBus.RecoverabilityExecutor 즉시 재시도 메시지를 다시 시도 할 것입니다이 말에 응답 방법 안타 는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."); } }
, 그것은 아래의 오류가 발생합니다 'a222b136-6a4e-474e-8012-cc1c24e5e539'예외로 인해 : System.Exception : 'System.String'에 대한 메타 데이터를 찾을 수 없습니다. 다음을 확인하십시오. 1. 'System.String'은 초기 스캐닝에 포함됩니다. 2. 'System.String'은 'IMessage', 'IEvent'또는 'ICommand'중 하나를 구현하거나 인터페이스를 구현하지 않으려는 경우 '눈에 거슬리지 않는 모드'를 사용할 수 있습니다. C에서 NServiceBus.Unicast.Messages.MessageMetadataRegistry.GetMessageMetadata (타입은 messageType)에서 : \ 빌드 \ SRC \ NServiceBus.Core \ 유니 캐스트 \ 메시지 \ MessageMetadataRegistry.cs : 라인 39
나는 이유를 모르겠어요
이을 보낸 JSON ... 이미 핸들러에서 메시지를받은 후 System.String
오류가 발생 것이고 속성이 채워집니다 것은 다음과 같습니다
{
"$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 ERROR NServiceBus.RecoverabilityExecutor 이동 메시지 '6405179d-ea36-4264-af2a-704da19af120을 '예외로 인해 처리가 실패했기 때문에'오류 큐 '오류가 발생했습니다 : NServiceBus.MessageDeserializationException : 전송 메시지에서 논리 메시지를 추출하는 동안 오류가 발생했습니다. 6405179d-ea36-4264-af2a-704da19af120 ---> System.Exception : 'Newtonsoft.Json.Linq.JObject'에 대한 메타 데이터를 찾을 수 없습니다.
여기에 누락 된 내용이 없습니다. 이전 버전에서는 문제가되지 않았습니다. 이거 버그 야 ...?
그래, 내가 질문을 게시 한 후 아침에 이것을 알아 챘다. 당신은 100 % 문제였습니다. 나는 한 지점에서 문자열을 전달할 수 있었다고 맹세 할 수있었습니다. 그래도 고마워. 잘하면 누군가 다른 사람을 도울 것입니다. – ragerory