2017-05-18 7 views
2

私のアプリケーションはエンドポイントからイベントを受信しようとしています。
私がSubscribe <>()を明示的に指定すると、公開エンドポイントでサブスクリプションが受信されます。大会を構成して同じ結果を得ようとすると、失敗します。規則で設定されたイベントはサブスクリプションにはなりません

私には何が欠けていますか?

私の構成は次のようになります。

public Subscriber(int maxConcurrency) 
{ 
    var pingEventType = typeof(IMyEvent); 
    var pingHandlerType = typeof(MyEventHandler); 

    var busConfiguration = new BusConfiguration(); 
    busConfiguration.EndpointName("MyEndpointName"); 
    busConfiguration.UseSerialization<JsonSerializer>(); 
    busConfiguration.EnableInstallers(); 
    busConfiguration.UsePersistence<NHibernatePersistence>(); 
    busConfiguration 
     .UseTransport<SqlServerTransport>() 
     .CallbackReceiverMaxConcurrency(maxConcurrency); 
    busConfiguration.AssembliesToScan(AllAssemblies 
     .Matching("NServiceBus") 
     .And("ServiceControl") 
     .And(pingHandlerType.AssemblyQualifiedName) 
     .And(pingEventType.AssemblyQualifiedName)); 
    busConfiguration 
     .Conventions() 
     .DefiningEventsAs(x => x.Namespace != null && x.Namespace == pingEventType.Namespace); 

    var container = new ContainerBuilder().Build(); 
    busConfiguration.UseContainer<AutofacBuilder>(customizations => 
    { 
     customizations.ExistingLifetimeScope(container); 
    }); 
    _startableBus = Bus.Create(busConfiguration); 

    // Uncommenting below line results in subscription on the publishing endpoint 
    //_startableBus.Subscribe(pingEventType); 
} 

最も関連性の高いドキュメントとサンプルコード私が何をすべき何かを言及していないようだhttps://docs.particular.net/nservicebus/messaging/conventions?version=core_5

+1

メッセージアセンブリをアセンブリスキャンに含める必要があると思われますか? –

+0

私は '.And(pingEventType.AssemblyQualifiedName));という行に書かれていると思っていましたが、間違っていました。将来の私と他の人のための答えに入れて –

答えて

4

が見つかりました。 AssemblyQualifiedNameは、アセンブリで接頭辞が付いた型の名前です。私が必要としたのは、アセンブリ自体の名前でした。 だから、

busConfiguration.AssembliesToScan(AllAssemblies 
    .Matching("NServiceBus") 
    .And("ServiceControl") 
    .And(pingHandlerType.AssemblyQualifiedName) 
    .And(pingEventType.AssemblyQualifiedName)); 

は時間のために私を投げた何

busConfiguration.AssembliesToScan(AllAssemblies 
    .Matching("NServiceBus") 
    .And("ServiceControl") 
    .And(pingHandlerType.Assembly.GetName().Name) 
    .And(pingEventType.Assembly.GetName().Name)); 

されている必要がありますがtype.Assmembly.FullNameは、それが付属バージョン情報などですすべてとアセンブリの名前であるということでした。それはどちらもうまくいかない。

関連する問題