首页 文章

在NServiceBus中接收MessageDeserialization异常

提问于
浏览
2

我刚刚熟悉NServiceBus,我收到了MessageDeserialization异常和堆栈跟踪,如下所示 .

对于一些环境信息......我正在使用队列的azure持久性 . 我可以看到订阅表以及我的订阅者的所有 endpoints 地址 .

我有3个MVC Web API托管应用程序 . 发布导致此异常的消息的Service / API在其app.config中配置为订阅自身和其他2个api . 其他似乎没有问题的人只有1个订阅 . 第一个订阅了自己的一个事件 . 另一个订阅了来自3rd service / api的3个事件 .

我试过的东西是为了解决这个问题 . 我使用约定来定义我的事件,但现在我的事件消息都实现了IEvent . 我还定义了JsonSerializer . 这是我的总线配置设置......

public class NServiceBusEndpointConfig : IConfigureThisEndpoint, AsA_Worker
{
    public static IBus bus;

    public void Customize(BusConfiguration busConfig)
    {
        var configuration = ContainerConfig.Container.Resolve<ICredentialDomainConfig>();

        busConfig.AzureConfigurationSource();
        busConfig.UseTransport<AzureStorageQueueTransport>()
            .ConnectionString(configuration.NServiceBusQueueConnectionString);
        busConfig.UsePersistence<AzureStoragePersistence>();
        busConfig.EndpointName("service1");

        busConfig.UseContainer<AutofacBuilder>(c => c.ExistingLifetimeScope(ContainerConfig.Container));
        busConfig.UseSerialization<JsonSerializer>();  
        busConfig.License(configuration.NServiceBusLicenseString);
    }
}

}

这是异常和堆栈跟踪详细信息......

“NServiceBus.ExceptionInfo.ExceptionType”:“NServiceBus.MessageDeserializationException”,
“NServiceBus.ExceptionInfo.InnerExceptionType”:“System.Exception”,
“NServiceBus.ExceptionInfo.HelpLink”:null,
“NServiceBus.ExceptionInfo.Message”:“尝试从传输消息中提取逻辑消息时发生错误
8dea1c2f-babb-438d-8e4c-a4cd002f5ab6“,”NServiceBus.ExceptionInfo.Source“:”NServiceBus.Core“,”NServiceBus.ExceptionInfo.StackTrace“:”NServiceBus.MessageDeserializationException:尝试从传输消息中提取逻辑消息时发生错误8dea1c2f-babb-438d-8e4c-a4cd002f5ab6 ---> System.Exception:找不到'Newtonsoft.Json.Linq.JObject'的元数据 . \ r \ n请确保以下内容:\ r \ n1 . 'Newtonsoft.Json.Linq.JObject'包含在初始扫描中 . \ r \ N2 . 'Newtonsoft.Json.Linq.JObject'实现'IMessage','IEvent'或'ICommand',或者,如果你不想实现一个接口,你可以使用'Unobtrusive Mode' . \ r \ n在NServiceBus .Unicast.Messages.LogicalMessageFactory.Create(类型messageType,Object message,Dictionary2 headers)在c:\ BuildAgent \ work \ 3206e2123f54fce4 \ src \ NServiceBus.Core \ Unicast \ Messages \ LogicalMessageFactory.cs: System.Linq.Enumerable.ToList的System.Linq.Enumerable.WhereSelectArrayIterator2.MoveNext()\ r \ n在System.Linq.Enumerable.ToList的System.Collections.Generic.List1..ctor(IEnumerable1集合)\ r \ n的第59行\ r \ n TSource](IEnumerable1 source)\ r \ n位于c:\ BuildAgent \ work \ 3206e2123f54fce4 \ src \ NServiceBus.Core \ Unicast \ Messages \ DeserializeLogicalMessagesBehavior中的NServiceBus.DeserializeLogicalMessagesBehavior.Extract(TransportMessage physicalMessage) . cs:第93行\ r \ n在NServiceBus.DeserializeLogicalMessagesBehavior.Invoke(IncomingContext上下文,Action next)中c:\ BuildAgent \ work \ 3206e2123f54fce4 \ src \ NSer viceBus.Core \ Unicast \ Messages \ DeserializeLogicalMessagesBehavior.cs:line 40 \ r \ n ---内部异常堆栈跟踪结束--- \ r \ n在NServiceBus.DeserializeLogicalMessagesBehavior.Invoke(IncomingContext context,Action next)在c:\ BuildAgent \ work \ 3206e2123f54fce4 \ src \ NServiceBus.Core \ Unicast \ Messages \ DeserializeLogicalMessagesBehavior.cs:第47行\ r \ n在NServiceBus.BehaviorChain1.InvokeNext(T context)中c :\ BuildAgent \ work \ 3206e2123f54fce4 \ src \ NServiceBus.Core \ Pipeline \ BehaviorChain.cs:第107行\ r \ n在NServiceBus.BehaviorChain1 . <> c__DisplayClass5 . <InvokeNext> b__2()在c:\ BuildAgent \ work \ 3206e2123f54fce4 \ src \ NServiceBus.Core \ Pipeline \ BehaviorChain.cs:第95行\ r \ n位于c:\ BuildAgent \ work \中的NServiceBus.ApplyIncomingTransportMessageMutatorsBehavior.Invoke(IncomingContext上下文,Action next) 3206e2123f54fce4 \ src \ NServiceBus.Core \ MessageMutator \ ApplyIncomingTransportMessageMutatorsBehavior.cs:第20行\ r \ n位于c:\ BuildAgen中的NServiceBus.BehaviorChain1.InvokeNext(T context) t \ work \ 3206e2123f54fce4 \ src \ NServiceBus.Core \ Pipeline \ BehaviorChain.cs:第107行\ r \ n在NServiceBus.BehaviorChain1 . <> c__DisplayClass5 . <InvokeNext> b__2()在c:\ BuildAgent \ work \ 3206e2123f54fce4 \ src \ NServiceBus.Core \ Pipeline \ BehaviorChain.cs:第95行\ r \ n位于c:\ BuildAgent \ work \ 3206e2123f54fce4 \中的NServiceBus.SubscriptionReceiverBehavior.Invoke(IncomingContext上下文,Action next) \ src \ NServiceBus.Core \单播\订阅\ MessageDrivenSubscriptions \ SubscriptionReceiverBehavior.cs:第32行\ r \ n位于c:\ BuildAgent \ work \ 3206e2123f54fce4 \ src \中的NServiceBus.BehaviorChain1.InvokeNext(T上下文) NServiceBus.Core \ Pipeline \ BehaviorChain.cs:第107行\ r \ n在NServiceBus.BehaviorChain1 . <> c__DisplayClass5 . <InvokeNext> b__2()在c:\ BuildAgent \ work \ 3206e2123f54fce4 \ src \ NServiceBus . Core \ Pipeline \ BehaviorChain.cs:第95行\ r \ n位于c:\ BuildAgent \ work \ 3206e2123f54fce4 \ src \ NServiceBus.Core中的NServiceBus.UnitOfWorkBehavior.Invoke(IncomingContext上下文,Action next) \的UnitOfWork \ UnitOfWorkB ehavior.cs:第42行\ n \ n在NServiceBus.BehaviorChain1.InvokeNext(T context)中c:\ BuildAgent \ work \ 3206e2123f54fce4 \ src \ NServiceBus.Core \ Pipeline \ BehaviorChain.cs:第107行\ r \ n在NServiceBus.BehaviorChain1 . <> c__DisplayClass5 . <InvokeNext> b__2()在c:\ BuildAgent \ work \ 3206e2123f54fce4 \ src \ NServiceBus.Core \ Pipeline \ BehaviorChain.cs:第95行\ r \ n位于c:\ BuildAgent \ work \中的NServiceBus.ChildContainerBehavior.Invoke(IncomingContext context,Action next) \ 3206e2123f54fce4 \ src \ NServiceBus.Core \ Unicast \ Behaviors \ ChildContainerBehavior.cs:第17行\ r \ n位于c:\ BuildAgent \ work \ 3206e2123f54fce4 \ src \中的NServiceBus.BehaviorChain1.InvokeNext(T上下文) NServiceBus.Core \ Pipeline \ BehaviorChain.cs:第107行\ r \ n在NServiceBus.BehaviorChain1 . <> c__DisplayClass5 . <InvokeNext> b__2()在c:\ BuildAgent \ work \ 3206e2123f54fce4 \ src \ NServiceBus . Core \ Pipeline \ BehaviorChain.cs:第95行\ r \ n位于c:\ BuildAgent \ work \ 3206e2123f54fce4 \ src \ NServiceBus.Core中的NServiceBus.ProcessingStatisticsBehavior.Invoke(IncomingContext上下文,Action next) \监控\ ProcessingStatisticsBehavior.cs:L在NServiceBus.BehaviorChain1的c:\ BuildAgent \ work \ 3206e2123f54fce4 \ src \ NServiceBus.Core \ Pipeline \ BehaviorChain.cs:第107行\ n \ n \ n下的NServiceBus.BehaviorChain1.InvokeNext(T context)中的\ nNer 23 \ r \ n . < > c__DisplayClass5 . <InvokeNext> b__2()在c:\ BuildAgent \ work \ 3206e2123f54fce4 \ src \ NServiceBus.Core \ Pipeline \ BehaviorChain.cs:line 95 \ r \ n在NServiceBus.AuditBehavior.Invoke (IncomingContext上下文,Action next)c:\ BuildAgent \ work \ 3206e2123f54fce4 \ src \ NServiceBus.Core \ Audit \ AuditBehavior.cs:line 20 \ r \ n在NServiceBus.BehaviorChain1.InvokeNext(T在c:\ BuildAgent \ work \ 3206e2123f54fce4 \ src \ NServiceBus.Core \ Pipeline \ BehaviorChain.cs:第107行\ r \ n,在c:\ BuildAgent \ work \ 3206e2123f54fce4中的NServiceBus.BehaviorChain1.Invoke() \ src \ NServiceBus.Core \ Pipeline \ BehaviorChain.cs:第58行\ r \ n位于NS:serviceBus.Pipeline.PipelineExecutor.Execute [T](BehaviorChain1 pipelineAction,T context)c:\ BuildAgent \ work \ 3206e2123f54fce4 \ src \ NServiceBus.Core \ Pipeline \ PipelineExecutor.cs:第129行\ r \ n位于c:\ BuildAgent \ work \ 3206e2123f54fce4 \ src \ NServiceBus.Core \ Unicast \ Transport \ TransportReceiver.cs中的NServiceBus.Unicast.Transport.TransportReceiver.ProcessMessage(TransportMessage消息):第328行“,”NServiceBus.FailedQ“:” <<队列,
“NServiceBus.TimeOfFailure”:“2015-07-06 02:52:26:254996 Z”

这是请求的消息类...最初在消息中有3个不同的“信息”,但试图简化,所以现在只有事件中的权限信息...

public class CredentialPermissionGrantedEvent : IEvent
    {
        public PermissionInfo Permission { get; set; }
    }    

public class PermissionInfo
    {
        public Guid PermissionReference { get; set; }
        public DateTime ActivationDate { get; set; }
        public Guid CredentialReference { get; set; }
        public Guid DeviceReference { get; set; }
        public DateTime ExpirationDate { get; set; }
        public string Function { get; set; }
        public Guid ScheduleReference { get; set; }
        public long Timestamp { get; set; }
    }

任何帮助将不胜感激

  • 保罗

2 回答

  • 0

    看起来json.net将您的消息反序列化为JObject而不是消息的类型,两个 endpoints 是否都知道相同的类型?如果查看邮件正文,是否包含必要的json.net元数据($ type)?

  • 0
    • ServiceControl在发送消息进行重新处理时将其回调地址头(它发生在SQLServer和RabbitMQ传输中)添加到消息中

    • 处理消息的处理程序调用Bus.Reply或Bus.Return

    • 回复被路由到SC回调队列而不是实际目的地(在回复字段中设置)

    查找更多指南here

相关问题