我有一个.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相处得好吗?
(由于我不知道合适的技术可能是什么,请原谅缺少标签,并随意填写您认为合适的标签。)
答案 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
看一看,它可能会给你一些想法。