3

我的 MVC 应用程序中有一个端点设置,它启动了一个外部进程(powershell 脚本)。我希望能够在创建时将输出重定向到“实时”浏览器。有没有如何做到这一点的例子?

谢谢!

4

2 回答 2

1

读取进程的标准输出流并通过SignalR将其提供给浏览器应该可以工作。在这里,您可以找到一些示例来帮助您开始使用 SignalR。

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

从集线器外部通过集线器广播(在页面底部)

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

于 2012-08-07T12:24:41.830 回答
0

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

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

这是一个使用 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 连接。通用网关接口,我想就是这个意思。

于 2012-08-07T15:35:00.310 回答