2012-07-23 148 views
2

我试图启动Topshelf的一个实例。我已经下载2.3版的二进制文件并解压所有内容。Topshelf服务/应用卡在“正在创建”

然后我创建了一个空的控制台应用程序。我已经改变了框架.NET 4.0 framework和下面的代码添加到我的static void Main()方法:

Host h = HostFactory.New(x => 
{ 
    x.Service< MyApp>(s => 
     { 
      s.SetServiceName("Something"); 
      s.ConstructUsing(name => new MyApp()); 
      s.WhenStarted(tc => tc.Start()); 
      s.WhenStopped(tc => tc.Stop()); 
     }); 

    x.RunAsLocalSystem(); 

    x.SetDescription("Something"); 
    x.SetDisplayName("Something"); 
    x.SetServiceName("Something"); 
}); 

h.Run(); 

的consoleapp运行正常时,我打F5。

然后,我将bin/release输出复制到topshelf/services/test目录并运行Topshelf.Host.exe。这是结果: Topshelf console output

如果我指出我的浏览器到仪表板,这是我所看到的: Topshelf dashboard

“测试”服务口口声声说“创建”(等待超过15分钟)。

我在做什么错?我已经尝试了多种控制台应用程序。如果我在我的控制台应用程序上调用install,则该应用程序会成功注册。

在此先感谢!

+0

您是否记得正确命名配置文件?好像配置文件必须在文件夹后面命名为_exactly_。所以如果该文件夹是测试,配置文件必须是test.config。或者相反,如果配置文件是“MyAssembly.dll.config”,则该文件夹必须被称为“MyAssembly.dll”(是的,包括.dll)。 – 2012-08-20 07:56:26

回答

1

将Topshelf DLL链接到控制台应用程序时,应该从命令行运行控制台应用程序。从我所看到的情况来看,您正尝试使用Topshelf主机。尝试运行您的控制台应用程序,您应该看到它正确启动您的服务。

+0

我不明白。我不想手动运行我的控制台应用程序。我希望Topshelf能够处理这个问题,听取/ services目录中的更改,让我像Windows Service等那样运行多个应用程序。这不是Topshelf的目的吗?谢谢! :-) – jhovgaard 2012-07-23 18:13:30

+0

Topshelf提供的功能之一是Shelving功能。这是Topshelf.Host的责任。这就是海报所要求的,因此从命令行运行服务的可能性是无关紧要的。我也有完全一样的问题。它独立工作,但是当我尝试将它作为架子运行时,它会弹出。 – 2012-08-20 07:54:51

+1

好吧,搁置是一个破碎的功能,它从3.0版本中删除。在同一个进程空间中运行单独服务的问题太多,以及对如何处理线程异常的普遍缺乏了解。所以我们推出了它并简化了Topshelf,成为轻松创建服务所需的最小功能集(这是最初的章程)。 – 2012-08-25 22:47:47