Topshelf多个主机

jac*_*kie 5 topshelf

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

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

// Start hosts
 in one application Runner.Run (h1, h2);
Run Code Online (Sandbox Code Playgroud)

编辑

解决了线程.但不确定它是否安全......

new Thread (()=>Runner.Run (h1));    
new Thread (()=>Runner.Run (h2));
Run Code Online (Sandbox Code Playgroud)

Ben*_*lde 9

来自Topshelf 文档:

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


Tra*_*vis 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>({ ... ]);
}); 
Run Code Online (Sandbox Code Playgroud)

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

  • 我们如何在 TopShelf 3.0 中做到这一点? (7认同)
  • 从 3.0 开始,不支持以这种方式提供多种服务。 (4认同)
  • 你说“以这种方式”。目前还有其他办法吗?由于 Lognet 1.2.11 出现问题,我升级了 topshelf,却发现此功能(以及与此相关的完整 DSL)已消失或已更改:s (2认同)