2012-08-07 51 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連接。通用網關接口,我認爲是這意味着什麼。

相關問題