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

本文关键字:IoC 控制 服务 quot 响应 功能 | 更新日期: 2023-09-27 18:20:03

我是Castle Windsor作为我的IoC和TopShelf作为服务运行它。当我把它作为控制台应用程序运行时,它运行得很好。当我安装它并将其作为服务运行时,过一段时间后,它会告诉我"该服务没有响应控制功能。"仅在Windows 8/Windows Server 2012上。它在Windows7上运行得很好。

当我删除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

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

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

假设我是对的,你该怎么解决?如果不了解你在集装箱里做什么,很难说。这看起来几乎和我的Topshelf服务一模一样,所以你至少走在了正确的轨道上。也许有什么事情可以推迟到以后在容器中执行?