【问题标题】:Best Practices: Adding a CLI to Existing Windows Service in .NET / Core最佳实践:将 CLI 添加到 .NET / Core 中的现有 Windows 服务
【发布时间】:2017-12-02 02:56:17
【问题描述】:

我想知道是否有人对实现现有 Windows 服务的命令行界面的最佳方式有任何建议。

理想情况下,可以满足以下要求:

  • 支持 .Net Core 并跨平台工作
  • 自托管(即不是单独的可执行文件)
  • 已在全球范围内注册并可在任何终端中使用(即 > myApp doThis -please --prettyplease)
  • 可以通过管道传输到 Web 界面,以便通过现有的 Web 应用程序进行远程终端访问
  • 可通过其他本地网络设备上的终端访问

最大的要求是它可以跨平台工作,并且不依赖于 Windows。任何建议都非常感谢!!!

【问题讨论】:

    标签: c# .net c#-4.0 asp.net-core .net-core


    【解决方案1】:

    带有“什么是最好的”短语的问题通常不适合 stackoverflow,因为它们是主观的 - 您的查询可能没有正确的答案,但也许会有一些好的答案。

    我过去多次使用的一个选项是实现类似简单的 shell/命令提示符,通过 telnet 访问。您只需打开一个侦听套接字 (TcpListener) 并接受发送给它的文本命令/向它写入文本,就像您第一天的编程一样,带有控制台输入和输出流打印。简单的 tcp 服务器网络上有大量示例,所以我不会在这里提供任何代码。就您的观点而言:

    支持 .Net Core 并跨平台工作

    它是基于 tcp 的,这是固有的

    自托管(即不是单独的可执行文件)

    在应用启动时启动,由应用托管,不需要任何复杂的 IPc

    已在全球范围内注册并可在任何终端使用(即 > myApp doThis -please --prettyplease)

    防火墙可能是唯一阻止远程设备通信的东西

    调用通过管道传输到 Web 界面,以便通过现有 Web 应用程序进行远程终端访问

    存在基于 html5/web 的 telnet 实现。也可以从中制作一个简单的Web界面(将浏览器视为telnet;它们之间的区别很小,它们都读取和写入tcp套接字,只是浏览器从http协议中添加了更多文本。您可以将其过滤掉,然后获取用户可以改变的有趣部分(URL))

    可通过其他本地网络设备上的终端访问

    以上介绍

    我最后一次实现这个是在信用卡终端使用的服务器上。它已经有一个监听套接字并且客户端遵循严格的协议,因此很容易检测到消息何时与协议不匹配并将其视为命令。系统发展到可以通过简单的 telnet 接口完全远程配置服务器,可以添加新的信用卡范围和路由,可以启用调试打印输出,所有流量都将发送到 telnet 客户端,某些卡终端可以是监控等;只不过是command = streamreader.ReadLine()if(command == "debug") Global.DebugLoggingStream = tcpWriterStream的compsci101东西

    它也有一个基于 HttpListener 的 Web 界面,它只是提供了一个格式良好的最新错误列表、一些配置设置等。有些东西在表格中的网页上比在 80char 列格式中更好.最终我将其升级为更像终端;用户可以用命令结束 URL,命令将被执行并将结果放入数组中。每次提供页面时,他的数组都会被转储,因此它本身就变成了一种命令 shell,不需要 telnet。我保留了 telnet 接口,因为它有利于实时调试、在消息发生时观看消息等,但如果你想要真正花哨的话,现在 websockets 就是为这类事情而存在的。

    另一个想法让我想到了;也许大部分艰苦的工作已经为你完成了,如果你能找到一个 irc 服务器的 c# 实现,与一个基于 web 的 irc 客户端配对,它将提供一种与你的服务“聊天”的方式(这几乎是所有命令外壳是;与程序进行文本聊天的人)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多