2012-02-09 33 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的形式返回 。