如何通过HTTP发送进程的stdout

时间:2012-08-07 12:16:41

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

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

谢谢!

2 个答案:

答案 0 :(得分:1)

阅读流程'标准输出流并通过SignalR将其提供给浏览器应该可以正常工作。在这里,您可以找到some examples来帮助您开始使用SignalR。

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

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

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

答案 1 :(得分:0)

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

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

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

使用这个我也成功地使用JavaScript和JSON。

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

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

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

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

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