5

topshelf 有没有办法在一个可执行文件中运行多个主机?

// Create hosts
var h1 = HostFactory.New (...); var h2 = HostFactory.New (...)

// Start hosts
 in one application Runner.Run (h1, h2);

编辑

用线程解决。但不确定是否安全...

new Thread (()=>Runner.Run (h1));    
new Thread (()=>Runner.Run (h2));
4

2 回答 2

10

来自 Topshelf文档

您只能拥有一项服务!从 3.x Topshelf 开始,基本产品不再支持托管多个服务。这样做是因为要实现的代码非常脆弱且难以调试。我们选择了更简单、更清洁的基础产品。此功能很可能会以添加 nuget 的形式回归。

于 2014-09-05T15:45:29.577 回答
1

注意:这仅对 Topshelf 3.0 之前的版本有效。在 3.0 中,这已被删除,并被其他托管多个服务的方法所取代。

没有办法运行多个主机。启动主机会阻止执行,会做很多事情。不过,您可以在单个主机中注册多个逻辑服务。

https://github.com/Topshelf/Topshelf/wiki/Creating-a-service

return (int)HostFactory.Run(x => {
  x.Service<Service1>({ ... });
  x.Service<Service2>({ ... ]);
}); 

所有逻辑服务都在单个 AppDomain 下运行。这可能是也可能不是问题。如果您需要将它们托管在单独的 AppDomain 中,我们开始着手搁置。http://topshelf-project.com/documentation/shelving/作为警告,如果您要启动多个具有相同类型的逻辑服务,请确保它们在配置时具有唯一的名称。

于 2012-02-10T11:38:49.620 回答