0

送信 Web アプリケーションから、NServiceBus はすべてのタイプをスキャンしてエンドポイントに割り当てます。これには約 3 分かかり、その後トランザクションがタイムアウトします。スキャンであるアセンブリを制限するために configure.with(assemblies) を試しました。メッセージの実装を制限するために、目立たない configure.definingas メソッドの「構成よりも規約」を試しました。古いバージョンから最新のバージョンに移行しているため、IMessage の実​​装規則を引き続き使用しています。

送信者のbus.startコードは次のとおりです

私は煙に取り組んでいます...助けていただければ幸いです。

//hack for the moment
string dir = System.Web.HttpContext.Current.Server.MapPath("/");
dir = Path.Combine(dir, "bin");
TraceDirect("Shared", System.Diagnostics.TraceEventType.Information, dir);
System.Reflection.Assembly[] asss = { System.Reflection.Assembly.LoadFile(Path.Combine(dir, "myfirst.dll")), System.Reflection.Assembly.LoadFile(Path.Combine(dir, "mysecond.dll")) };

try
{



    using (TransactionScope ambient = new TransactionScope( TransactionScopeOption.Suppress))
                    {
                        theMagicBus = NServiceBus.Configure.With(asss)
                        .DefineEndpointName("app")
                        .DefiningMessagesAs(t => typeof(IMessage).IsAssignableFrom(t))
                        .DefiningCommandsAs(t => typeof(ICommand).IsAssignableFrom(t))
                        .DefiningEventsAs(t => typeof(IEvent).IsAssignableFrom(t))
                        .DefaultBuilder()
                        .XmlSerializer()
                        .MsmqTransport().TransactionTimeout(TimeSpan.FromMinutes(5))
                        .IsTransactional(true)
                        .PurgeOnStartup(false)
                        .UnicastBus()
                        .ImpersonateSender(false)
                        .Log4Net<NServiceBusAppender>(a => { a.Name = "Shared"; })
                        .CreateBus()
                        .Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install());}}

そして、ここに私の設定があります

<MsmqTransportConfig NumberOfWorkerThreads="1" MaxRetries="5"  />
  <MessageForwardingInCaseOfFaultConfig ErrorQueue="error"/>
  <UnicastBusConfig>
        <MessageEndpointMappings>
            <add Messages="myfirst" Endpoint="endpoint"/>
                <add Messages="mysecond" Endpoint="msgsvcpubinputqueue"/>
         </MessageEndpointMappings>
  </UnicastBusConfig>
</MsmqTransportConfig>
4

1 に答える 1

2

コードサンプルから、バス初期化コードがどこにあるかは完全には明らかではありませんが、Webサービスのすべてのリクエストでバスを初期化しているように見えます。お願い、それはやめて!;)

NServiceBusは、アプリケーションの起動時に、作業を開始する前に一度初期化されるように設計されています。そして、それはあなたが選んだIoCコンテナに喜んで詰め込むか、またはIBusアプリケーションの存続期間中、結果を自分の周りに保持できるようにします。

于 2013-01-04T06:03:10.397 に答える