将“实时”控制台输出发送到客户端浏览器的技术

时间:2015-07-08 14:43:12

标签: asp.net asp.net-mvc websocket

我有一个.NET控制台应用程序,我想在ASP.NET MVC应用程序的服务器上启动。它会连续产生一段时间的输出,我想拦截这个输出并在浏览器窗口中显示给客户端。

从另一个控制台应用程序,我可以这样做:

public static void Main(string[] args)
{
  Process process = new Process();
  process.StartInfo.FileName = "RandomOutputCreator.exe";
  process.StartInfo.UseShellExecute = false;
  process.StartInfo.RedirectStandardOutput = true;
  process.OutputDataReceived += (sender, e) =>
  {
    Console.WriteLine(e.Data);
  };

  process.Start();
  process.BeginOutputReadLine();

  Console.ReadKey();
}

问题是在MVC应用程序中,我无法将我读取的数据推送到客户端,而是依赖于对控制器的请求来获取我的数据。 像WebSockets这样的东西可能对我有所帮助,但我对这种事情不熟悉,并想知道是否有一种“内置”的方法来实现这一点。

然后是Web API的事情。这可能是有用的,因为它似乎与MVC相处得好吗?

(由于我不知道合适的技术可能是什么,请原谅缺少标签,并随意填写您认为合适的标签。)

3 个答案:

答案 0 :(得分:3)

本主题通常会让我想起我所遵循的教程,以便允许从浏览器到ASP.NET应用程序的实时通信。

总结:您正在寻找的是WebSocket,并且没有标准的内置函数来处理它。但是,为了帮助你做一些事情,你仍然有图书馆信号R!

以下是引用教程的链接:http://www.asp.net/signalr/overview/getting-started/real-time-web-applications-with-signalr

答案 1 :(得分:1)

你可以尝试"打印"控制台输出在单独的框架中(请参阅iframe HTML标记)。 您应将其中一个操作设置为框架的源(URL)。您需要配置IIS以在没有执行时间限制的情况下运行此操作。

接下来,您的操作应运行外部程序,拦截其输出,并将其写入HTTP输出(请参阅ContentResult)。

答案 2 :(得分:1)

我有一个小项目就是这样做的:https://github.com/vtortola/WebSocketListener/wiki/WebSocketListener-Terminal-Server

enter image description here

看一看,它可能会给你一些想法。