";服务没有响应控制功能“;?当使用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
很可能是某些原因导致BuildContainer()
花费太长时间,而服务经理说:"嗯,你太慢了"。将应用程序作为控制台运行时没有时间限制。我不确定Windows版本之间的时间限制是否发生了变化,以说明为什么它只在Win8/2012上出错。这些机器上的某些东西也可能使BuildContainer()
比旧系统上的时间更长。
假设我是对的,你该怎么解决?如果不了解你在集装箱里做什么,很难说。这看起来几乎和我的Topshelf服务一模一样,所以你至少走在了正确的轨道上。也许有什么事情可以推迟到以后在容器中执行?