NServiceBus に慣れてきたばかりで、以下に示すように MessageDeserialization 例外とスタック トレースを受け取ります。
いくつかの環境情報については...キューでAzureの永続性を使用しています。サブスクリプション テーブルと、サブスクライバーのすべてのエンドポイント アドレスのように見えるものを確認できます。
MVC Web API でホストされているアプリが 3 つあります。この例外の原因となるメッセージを発行するサービス/API は、app.config でそれ自体と他の 2 つの API をサブスクライブするように構成されています。問題がないように見えるその他のサブスクリプションは 1 つだけです。1 つ目は、独自のイベントの 1 つにサブスクライブします。もう 1 つは、3 番目のサービス/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": "An error occurred while attempting to extract logical messages from transport 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' のいずれかを実装します。あるいは、インターフェイスを実装したくない場合は、'控えめなモード' を使用できます。\r\n at NServiceBus .Unicast.Messages。
2 headers) in c:\\BuildAgent\\work\\3206e2123f54fce4\\src\\NServiceBus.Core\\Unicast\\Messages\\LogicalMessageFactory.cs:line 59\r\n at System.Linq.Enumerable.WhereSelectArrayIterator
2.MoveNext()\r\n System.Collections.Generic.List1..ctor(IEnumerable
1 コレクション)\r\n System.Linq.Enumerable.ToList[TSource](IEnumerable 1.InvokeNext(T context) in c:\BuildAgent\ work\3206e2123f54fce4\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 107\r\n at NServiceBus.BehaviorChain 1.InvokeNext(T context) in c:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Pipeline \BehaviorChain.cs:107 行目\r\n NServiceBus.BehaviorChain 1.InvokeNext(T コンテキスト) の c:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:107 行目\r\n NServiceBus.BehaviorChain 1.InvokeNext(T コンテキスト) で c:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 107\r\n at NServiceBus.BehaviorChain1 source)\r\n
at NServiceBus.DeserializeLogicalMessagesBehavior.Extract(TransportMessage physicalMessage) in c:\\BuildAgent\\work\\3206e2123f54fce4\\src\\NServiceBus.Core\\Unicast\\Messages\\DeserializeLogicalMessagesBehavior.cs:line 93\r\n at NServiceBus.DeserializeLogicalMessagesBehavior.Invoke(IncomingContext context, Action next) in c:\\BuildAgent\\work\\3206e2123f54fce4\\src\\NServiceBus.Core\\Unicast\\Messages\\DeserializeLogicalMessagesBehavior.cs:line 40\r\n --- End of inner exception stack trace ---\r\n at NServiceBus.DeserializeLogicalMessagesBehavior.Invoke(IncomingContext context, Action next) in c:\\BuildAgent\\work\\3206e2123f54fce4\\src\\NServiceBus.Core\\Unicast\\Messages\\DeserializeLogicalMessagesBehavior.cs:line 47\r\n at NServiceBus.BehaviorChain1.<>c__DisplayClass5.<InvokeNext>b__2() in c:\\BuildAgent\\work\\3206e2123f54fce4\\src\\NServiceBus.Core\\Pipeline\\BehaviorChain.cs:line 95\r\n at NServiceBus.ApplyIncomingTransportMessageMutatorsBehavior.Invoke(IncomingContext context, Action next) in c:\\BuildAgent\\work\\3206e2123f54fce4\\src\\NServiceBus.Core\\MessageMutator\\ApplyIncomingTransportMessageMutatorsBehavior.cs:line 20\r\n at NServiceBus.BehaviorChain
1.<>c__DisplayClass5.<InvokeNext>b__2() in c:\\BuildAgent\\work\\3206e2123f54fce4\\src\\NServiceBus.Core\\Pipeline\\BehaviorChain.cs:line 95\r\n at NServiceBus.SubscriptionReceiverBehavior.Invoke(IncomingContext context, Action next) in c:\\BuildAgent\\work\\3206e2123f54fce4\\src\\NServiceBus.Core\\Unicast\\Subscriptions\\MessageDrivenSubscriptions\\SubscriptionReceiverBehavior.cs:line 32\r\n at NServiceBus.BehaviorChain
1.<>c__DisplayClass5.<InvokeNext>b__2() in c:\\BuildAgent\\work\\3206e2123f54fce4\\src\\NServiceBus.Core\\Pipeline\\BehaviorChain.cs:line 95\r\n at NServiceBus.UnitOfWorkBehavior.Invoke(IncomingContext context, Action next) in c:\\BuildAgent\\work\\3206e2123f54fce4\\src\\NServiceBus.Core\\UnitOfWork\\UnitOfWorkBehavior.cs:line 42\r\n at NServiceBus.BehaviorChain
1.<>c__DisplayClass5.<InvokeNext>b__2() in c:\\BuildAgent\\work\\3206e2123f54fce4\\src\\NServiceBus.Core\\Pipeline\\BehaviorChain.cs:line 95\r\n at NServiceBus.ChildContainerBehavior.Invoke(IncomingContext context, Action next) in c:\\BuildAgent\\work\\3206e2123f54fce4\\src\\NServiceBus.Core\\Unicast\\Behaviors\\ChildContainerBehavior.cs:line 17\r\n at NServiceBus.BehaviorChain
1.InvokeNext(T context) in c:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 107\r\n at NServiceBus.BehaviorChain1.<>c__DisplayClass5.<InvokeNext>b__2() in c:\\BuildAgent\\work\\3206e2123f54fce4\\src\\NServiceBus.Core\\Pipeline\\BehaviorChain.cs:line 95\r\n at NServiceBus.ProcessingStatisticsBehavior.Invoke(IncomingContext context, Action next) in c:\\BuildAgent\\work\\3206e2123f54fce4\\src\\NServiceBus.Core\\Monitoring\\ProcessingStatisticsBehavior.cs:line 23\r\n at NServiceBus.BehaviorChain
1.InvokeNext(T context) in c:\ BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 107\r\n at NServiceBus.BehaviorChain1.<>c__DisplayClass5.<InvokeNext>b__2() in c:\\BuildAgent\\work\\3206e2123f54fce4\\src\\NServiceBus.Core\\Pipeline\\BehaviorChain.cs:line 95\r\n at NServiceBus.AuditBehavior.Invoke(IncomingContext context, Action next) in c:\\BuildAgent\\work\\3206e2123f54fce4\\src\\NServiceBus.Core\\Audit\\AuditBehavior.cs:line 20\r\n at NServiceBus.BehaviorChain
1.InvokeNext(T context) in c:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core \Pipeline\BehaviorChain.cs:NServiceBus.BehaviorChain の 107 行目\r\n1.Invoke() in c:\\BuildAgent\\work\\3206e2123f54fce4\\src\\NServiceBus.Core\\Pipeline\\BehaviorChain.cs:line 58\r\n at NServiceBus.Pipeline.PipelineExecutor.Execute[T](BehaviorChain
c:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Pipeline\PipelineExecutor.cs:line 129\r\n の 1 つの pipelineAction、T コンテキスト) c の NServiceBus.Unicast.Transport.TransportReceiver.ProcessMessage(TransportMessage メッセージ) で:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Unicast\Transport\TransportReceiver.cs:328行目","NServiceBus.FailedQ": "<<Queue, "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; }
}
どんな援助でも大歓迎です
- ポール