2012-08-07 75 views
3

我有一个端点设置在我的MVC应用程序启动一个外部进程(PowerShell脚本)。我希望能够在创建时将输出重定向到“实时”浏览器。有没有例子说明如何做到这一点?如何通过HTTP发送一个进程的标准输出

谢谢!

+0

你能否提供更多关于你在做什么的信息?这听起来像你有一个MVC应用程序正在运行,就像启动其他进程的服务一样,并且你希望能够在另一个应用程序(一个Web浏览器)中看到这些其他进程的输出。为什么不在MVC应用程序中显示输出? – 2012-08-07 12:22:47

+0

它实际上只是一个远程启动服务的API端点,我希望能够将输出显示给调用端点的远程计算机。 – Micah 2012-08-07 13:14:09

回答

1

读取过程的标准输出流并通过SignalR将其送到浏览器应该可以工作。在这里您可以找到some examples以帮助您开始使用SignalR。

如果你决定要试一试这也可能对你有用:

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

我使用SignalR自己成功地在类似的情景(喂养一个真正的浏览器长时间运行的进度)。

0

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

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

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

使用这个我也成功地使用JavaScript与JSON以及。

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

关键在于让您的Web服务器功能实现HTTP协议并保持TCP连接推送额外的内容。您的案例中的额外内容将是您启动的流程的输出。

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

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

其中一些实际上类似于Apache之前在原始Web服务器中使用的较早的CGI类型的功能。这些服务器所做的是启动一个应用程序,通常是一些脚本,比如Perl,但有时也编译这样的脚本作为C,然后从应用程序中获取标准输出,并将其反射回浏览器的TCP连接。通用网关接口,我认为是这意味着什么。

相关问题