2016-02-03 47 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守护进程运行。