1

我是 Castle Windsor 作为我的 IoC 和 TopShelf 将其作为服务运行。当我将它作为控制台应用程序运行时,它工作得很好。什么时候安装它并将其作为服务运行,过了一会儿它给了我“服务没有响应控制功能”。仅适用于 Windows 8/Windows Server 2012。它在 Windows 7 上运行良好。

当我删除BuilContainer()时,它在所有平台上都可以正常工作。

我还让我的记录器在 BuildContainer 之前记录“a0”,之后记录“a1”。将记录“a0”,但作为服务运行时不会记录“a1”。

这种方法被包括我在内的许多人使用,它适用于 Windows 7,但不适用于 Windows 8/Windows Server 2012

        BuildContainer(); // builds IWindsorContainer and registers component.

        HostFactory.Run(x =>
        {
            x.Service<IService>(config =>
            {
                config.ConstructUsing(o => Container.Resolve<IService>("myService"));
                config.WhenStarted(o => o.Start());
                config.WhenStopped(o => {o.Stop(); Container.Dispose();} );
            });

            x.RunAsLocalSystem();
            x.SetServiceName("ServiceName");
            x.SetDescription("ServiceDesc");
            x.SetDisplayName("ServiceDispName");

        });

怎么了 ?

谢谢,佩曼

4

1 回答 1

0

很可能是什么让您BuildContainer()花费了太长时间,服务经理说,“嗯,你太慢了”。将应用程序作为控制台运行时没有时间限制。我不确定 Windows 版本之间的时间限制是否会改变,以说明为什么它只是在 Win8/2012 上出错。这些机器上的某些东西也可能BuildContainer()比旧系统上花费更长的时间。

假设我是正确的,你如何解决它?如果不了解您在容器中所做的事情,就很难说。这看起来几乎和我的 Topshelf 服务的样子一模一样,所以至少你走在了正确的轨道上。也许您可以将容器中的某些事情推迟到以后再做?

于 2013-06-26T01:19:23.920 回答