2016-02-03 94 views
2

我用C#創建了一個GRPC服務器,使用Link給出的例子。現在我想弄清楚我應該如何託管這臺服務器,以便我實現以下目標:GRPC服務應該如何託管?

  • 我應該讓此服務器成爲控制檯應用程序還是Windows服務。如果我使它成爲一個Windows服務,然後更新服務將是繁瑣的(這是一個很大的負面),如果我使它成爲一個控制檯應用程序,然後更新將只需要關閉EXE。但是,這是與錯誤關閉相同的價格。還有其他更好的方法嗎?
  • 在IIS這個問題將不是B那裏,我可以簡單地從LB刪除該網站並停止網站進行更新,但因爲GRPC不會是IIS的一部分,我不知道什麼是獲得方式這工作。

好了體系結構的任何引用都歡迎。

+1

鑑於系統的性質,它聽起來應該是_reliable_並且有些_fault-tolerant_。這是一個通常不會與_console apps_關聯的特徵。一個很大的消極。另一方面,Windows服務是_recoverable_。一個很大的積極。 – MickyD

回答

2

目前GRPC不支持ASP.Net/IIS集成。您需要在控制檯或Windows服務中託管服務器。

有可能你會想這是一個Windows服務,使其更容易保持服務器在重新啓動或崩潰運行。如果您想輕鬆將您的控制檯應用程序轉換爲Windows服務,我會推薦使用優秀的TopShelf Nuget。

更新服務可以象一個控制檯應用程序來完成。

  • 停止Windows服務。 net stop <service-name}>
  • 複製更新後的程序集。
  • 啓動Windowsservice net start <service-name>
1

我公司(Shortbar)正在爲呼籲GRPC霍爾姆斯一個酒店管理系統的應用服務器。我們設置如下:

  • HOLMS.Application是一個.NET類庫,做服務器的實際工作
  • HOLMS.Application.ConsoleRunner是一個C#控制檯應用程序託管HOLMS.Application(組裝) 。 (1)開發人員爲了方便(在問題中提到)以及(2)在Docker容器內部運行的生產場景使用控制檯運行器,其中容器運行時(例如Amazon ECS)實現作業控制/縮放。它遵循「12因子應用程序」指南,包括將其本身作爲單獨的獨立無狀態進程運行,快速啓動/關閉以及環境變量配置注入。系統會記錄到stdout中,但stdout會在prod環境中耗盡(例如Sumo,logstash等)。這就是我們的SaaS多租戶解決方案將如何投入生產。
  • HOLMS.Application.ServiceRunner將HOLMS.Application打包到Windows服務中,用於更傳統的內部部署環境,其中客戶的IT部門將自行運行服務。此軟件包使用Windows註冊表進行配置,並依賴Windows服務作業控制來啓動/關閉/重新啓動。它登錄到Windows事件日誌。

ConsoleRunner和ServiceRunner每個只有大約200行代碼;大多數情況下,他們只是包裝應用程序包,然後調用它。

希望這會有所幫助。

0

我打算再添加一個選項。

使用dot net核心,現在可以將其作爲Linux守護進程運行。