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));
答案 0 :(得分:8)
来自Topshelf docs:
您只能提供一项服务!截至3.x Topshelf的基础产品没有 更长的支持托管多项服务。这样做是因为 要实现的代码非常脆弱且难以调试。我们选择了 更简单,更清洁的基础产品。这个功能很有可能 以添加nuget的形式回来。
答案 1 :(得分: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/作为警告,如果您要启动多个具有相同类型的逻辑服务,请确保在配置时具有唯一的名称。