最佳实践:在.NET/Core中为现有的Windows服务添加CLI

3
我想知道是否有任何建议来实现一个命令行界面到现有的Windows服务。希望满足以下要求:能够支持.Net Core并且跨平台、自主托管(即不是一个单独的可执行文件)、在全局注册并可以在终端中使用 (如:> myApp doThis -please --prettyplease)、 可以通过现有的Web应用程序进行远程终端访问、并且可以通过其他本地网络设备的终端进行访问。最关键的要求是要跨平台,而不是与Windows绑定。非常感谢您的任何建议!
1个回答

4
通常带有“最佳是什么”短语的问题不适合在stackoverflow上,因为它们是主观的-您的查询可能没有正确答案,但也许会有一些好的答案。
我过去多次使用的一个选项是实现类似于通过telnet访问的简单shell /命令提示符。 您只需打开一个侦听套接字(TcpListener),然后接受发送到它/写入文本命令,就像您编程的第一天一样,具有控制台输入和输出流打印。 网上有很多简单TCP服务器的示例,因此我不会在此处提供任何代码。 就您的要点而言:
- 支持.Net Core并跨平台 - 基于tcp,这是固有的 - 自托管(即不是单独的可执行文件) - 在应用程序启动时启动,由应用程序托管,不需要任何复杂的IPC - 在任何终端中全局注册并可用 - 可通过Web界面传递以通过现有Web应用程序进行远程终端访问 - 可在其他本地网络设备上的终端中使用
我上次实施这个功能是在信用卡终端使用的服务器上。 它已经拥有了一个侦听套接字,并且客户端遵循严格的协议,因此很容易检测到消息不符合协议的情况,并将其视为命令。 系统发展到可以通过简单的telnet界面进行远程配置的地步,可以添加新的信用卡范围和路由,可以启用调试打印输出,并将所有流量发送到telnet客户端,可以监视某些卡终端等。它仅仅是command = streamreader.ReadLine(), if(command == "debug") Global.DebugLoggingStream = tcpWriterStream这样的计算机科学101级别的东西。
它也有一个基于HttpListener的Web界面,只提供了最新错误的精心格式化列表、一些配置设置等。在表格中,一些东西比80个字符的列格式更好。最终,我将其升级为更像终端的方式;用户可以用命令结束URL,命令会被执行并将结果放入数组中。每次页面被服务时,数组会被倾倒,因此它成为了一种命令shell本身,不需要telnet。我保留了telnet接口,因为它非常适合实时调试,观察消息的发生等,但如果你想变得非常花哨,现在存在着Websockets,以便进行这种操作。
另一个想法浮现在我脑海中;也许大部分努力已经为您完成,如果您能找到一个C#实现的IRC服务器,并与基于Web的IRC客户端配对,那么它将提供一种与您的服务“聊天”的方式(这几乎是所有命令shell所做的事情;人类与程序进行文本聊天)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接