“服务没有响应控制功能”?使用IoC时

时间:2013-06-25 18:53:13

标签: c# windows-services castle-windsor topshelf

我是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");

        });

出了什么问题?

谢谢, Peyman的

1 个答案:

答案 0 :(得分:0)

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

假设我是对的,你怎么解决它?如果不了解你在容器中做了什么,很难说。这看起来几乎与我的Topshelf服务看起来一样,所以你至少在正确的轨道上。也许你可以在容器中推迟到晚些时候做什么?