1

起動時にモジュールを登録するのに時間がかかる NServiceBus Windows サービスがあります。Service Manager が正常に起動するまでの時間を延長してください。NServiceBus を使用しないサービスの場合、これはServiceBase.RequestAdditionalTime. NServiceBus.Host を使用してこれを行うにはどうすればよいでしょうか?

4

2 に答える 2

1

最終的にNServiceBus.Hostを削除し、代わりにTopshelfを使用しました。サービスの起動時に必要な追加の構成に注意してください。

public static void Main(string[] args)
{
    HostFactory.Run(hf =>
    {
        hf.Service<MailboxListenerService>(svc =>
        {
            svc.ConstructUsing(mls => new MailboxListenerService());
            svc.WhenStarted((mls, control) => mls.Start(control));
            svc.WhenStopped(mls => mls.Stop());
        });
    });
}

public class MailboxListenerService
{
    private RunWebApi _webApiRunner;

    public MailboxListenerService()
    {
    }

    public bool Start(HostControl hostControl)
    {
        hostControl.RequestAdditionalTime(TimeSpan.FromSeconds(60));

        var kernel = new StandardKernel(new MailboxListenerModule());

        Configure.With()
            .DefineEndpointName("my.endpoint.name")
            .DefiningEventsAs(t => typeof(Messaging.Markers.IEvent).IsAssignableFrom(t))
            .Log4Net<NlogAppenderForLog4Net>(a => { })
            .NinjectBuilder(kernel)
            .MsmqTransport()
                .MsmqSubscriptionStorage("my.subscription.storage")
            .DisableTimeoutManager()
            .DisableSecondLevelRetries()
            .UnicastBus()
            .ImpersonateSender(false);

        _webApiRunner = kernel.Get<RunWebApi>();
        _webApiRunner.Run();

        return true;
    }

    public void Stop()
    {
        _webApiRunner.Stop();
    }
}
于 2013-03-11T21:47:50.763 に答える
0

残念ながら、いいえ。将来のバージョンでこれをサポートするために問題を解決しました。

https://github.com/NServiceBus/NServiceBus/issues/1046

回避策は、レジストリを使用してサービスのタイムアウトを増やすことです。

http://support.microsoft.com/kb/824344

于 2013-03-11T18:37:48.557 に答える