我正在尝试找到一个解决方案来控制我通过webforms启动的流程。
我知道使用System.Diagnostics.Process类启动它很容易。
我想要实现的是将数据发送到进程(terraria服务器)。基本上服务器本身在正确启动时你可以在里面写一些命令,如kick / ban / save / exit等。
我想编写这些命令,但通过webforms应用程序进行远程控制。
我认为最接近的解决方案是通过我编写的守护进程调用服务器,该守护进程将作为webforms命令和服务器应用程序之间的网关。这是正确的做事方式吗?或者有更简单的方法吗?
答案 0 :(得分:0)
您是否正在寻找.Net 3.5中引入的 BackgroundWorker类? 要在后台执行耗时的操作,请创建BackgroundWorker,然后侦听报告操作进度的事件,并在操作完成时发出信号。它在一个单独的线程上执行。
MSDN site有一些例子可以帮助你弄清楚这是否适合你。
或者您可以使用网络服务或WCF ,不是吗?您可以在Web服务器上托管Web服务,也可以作为Windows服务托管。
答案 1 :(得分:0)
您可以在应用程序启动时启动该过程,并在静态变量中保留对它的引用。您还需要附加到OutputDataReceived
事件,以便记录流程发送到其StandardOutput流的任何数据。
这个想法是该进程将在服务器上运行,Web应用程序将以静默方式记录它发送的任何信息。当请求到来时,缓冲区将被发送给用户并被清除。
用户还可以通过其StandardInput
流发送Web应用程序将转发到流程的命令。
我没有尝试过,但它可能会奏效。您还需要考虑应用程序池回收时会发生什么。为了获得最佳效果,我认为您应该禁用自动回收。
答案 2 :(得分:0)
是的,这是最好的方法,使Windows服务能够控制和监控进程,并进入ASP.NET(webforms)应用程序的Windows服务构建API。
ASP.NET应用程序可以自动刷新页面(通过javascript或元刷新标记)并从控制流程的Windows服务获取新状态,事件更好,您可以构建javascript应用程序并获取新状态数据并使用ajax发送命令,因此不需要整页刷新。