【问题标题】:How to send stdout of a process over HTTP如何通过 HTTP 发送进程的标准输出
【发布时间】:2012-08-07 12:16:40
【问题描述】:

我的 MVC 应用程序中有一个端点设置,它启动一个外部进程(powershell 脚本)。我希望能够在创建时将输出重定向到“实时”浏览器。是否有任何示例说明如何执行此操作?

谢谢!

【问题讨论】:

  • 你能提供更多关于你在做什么的信息吗?听起来您有一个 MVC 应用程序,它像服务一样运行,它正在启动其他进程,并且您希望能够在另一个应用程序(Web 浏览器)中看到这些其他进程的输出。为什么不在 MVC 应用程序中显示输出?
  • 它实际上只是一个远程启动服务的 API 端点,我希望能够将输出显示到调用该端点的远程机器上。

标签: c# .net asp.net-mvc http stdout


【解决方案1】:

读取进程的标准输出流并通过SignalR 将其提供给浏览器应该可以工作。您可以在此处找到some examples,以帮助您开始使用 SignalR。

如果您决定尝试一下,这也可能对您有用:

Broadcasting over a Hub from outside of a Hub(在页面底部)

我自己在类似的场景中成功使用了 SignalR(将长时间运行的操作的实时进度提供给浏览器)。

【讨论】:

    【解决方案2】:

    您可以考虑的一种方法是我在一个小型销售点应用程序中使用的一种方法,它允许通过网络浏览器进行远程查询。

    我创建了一个简单的 Web 服务器,它作为附加到应用程序其余部分的 DLL 在自己的线程中运行。当应用程序启动时,它会检查网络服务器是否也应该启动。

    这是一个使用 C++ 和 CAsynch 套接字的非常简单的 Web 服务器,但它允许使用来自其他计算机的 Web 浏览器进行两种访问:(1) 下拉文件,例如 HTML 页面、Javascript、图像等,就像普通的 Web 服务器一样,并且 (2) 使用特定功能的 URL 激活特定的功能组件,例如生成报告。

    使用它,我也成功地使用了带有 JSON 的 JavaScript。

    您可以在许多地方找到各种语言的简单 HTTP Web 服务器的源代码示例,并且在 stackoverflow 问题中有一些示例和链接。

    这样做的关键是让您的 Web 服务器功能实现 HTTP 协议并保持 TCP 连接将其他内容推送出去。您的案例中的其他内容将是您已启动的流程的输出。

    因此,这将要求您启动进程并执行标准 I/O 重定向,以便您启动的进程将通过管道将其输出发送到您的 Web 服务器,然后该服务器将从管道读取进程输出,然后发送它将打开的 TCP 端口连接到浏览器。

    使用这个你实际上可以做一些 JavaScript 让浏览器用户通过开发一个基于文本的协议将命令发送回正在运行的进程,该协议被发送回 Web 服务器,然后将传入的文本发送到启动的进程。

    其中一些实际上类似于在 Apache 等之前的原始 Web 服务器中使用的旧 CGI 类型的功能。这些服务器所做的是启动应用程序,通常是一些脚本,例如 Perl,但有时也会编译一些东西,例如C,然后从应用程序获取标准输出并将其反射回浏览器 TCP 连接。通用网关接口,我想就是这个意思。

    【讨论】:

      猜你喜欢
      • 2019-05-22
      • 1970-01-01
      • 2014-03-04
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多