2012-02-09 29 views
4

有没有什么方法可以在一个可执行文件中运行多个主机?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

因此,这可能会导致很多问题,我不确定ServiceCoordinator是否可以像这样安全寻址,您可能会在它们之间发生串扰。此外,如果您尝试将其作为服务运行而不仅仅是控制台应用程序,则会出现奇怪的行为。我根本不会建议这种方法。如果您想了解更多创意,请加入我们的邮件列表https://groups.google.com/forum/#!forum/topshelf-discuss – Travis 2012-02-11 14:28:52

回答

1

:这是仅适用于3.0之前的版本Topshelf的。在3.0中,这被删除并正在被其他托管多种服务的方法取代。

没有办法运行多个主机。开始一个主机块的执行,做了一大堆事情。您可以在单个主机上注册多个逻辑服务。单一的AppDomain下运行

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

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

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

+3

从3.0开始,不支持多种服务。 – 2012-09-21 14:20:46

+2

你说“以这种方式”。现在还有其他方法吗?我使用Lognet 1.2.11升级了一些问题,只是为了看到这个功能(以及完整的DSL)已经不存在或改变了:s – Noctris 2012-12-16 21:55:21

+7

我们如何在TopShelf 3.0中做到这一点? – Zingui 2013-04-22 02:01:21

7

从Topshelf docs

你只能有一个服务!截至3.x Topshelf的基本产品号码为 的主机支持多项服务。这是因为 代码实现非常脆弱,难以调试。我们选择了 作为更简单更清洁的基础产品。此功能很可能会以附加nuget的形式返回 。