2011-06-04 69 views
0

我想在这里找到解决方案来控制我通过webforms启动的进程。使用webforms控制进程

我知道使用System.Diagnostics.Process类来启动和停止它非常容易。

我想实现的是将数据发送到进程(terraria服务器)。基本上,服务器本身当它被正确地启动,你可以在它里面写这样踢/禁止某些命令/保存/退出等

我想写,但远程通过web表单应用程序来控制这些命令。

我鑫卡特最近的解决方案就是通过后台调用服务器我会写,将工作作为web表单命令和服务器应用程序之间的网关。这是做事的正确方法吗?还是有更简单的方法来做到这一点?

回答

0

您是否正在寻找在.Net 3.5中引入的BackgroundWorker类的? 要在后台执行耗时的操作,请创建一个BackgroundWorker,然后监听报告操作进度的事件,并在操作完成时发出信号。它在一个单独的线程上执行。

MSDN site有一些例子,可以帮助你计算出,如果这是给你的。

或者您可以只使用网络服务或WCF,不是吗?您可以将Web服务托管在Web服务器上或作为Windows服务。

+0

这个想法并不坏,但问题是它不能永远听(因为它毕竟是一个网站) – Erick 2011-06-04 20:41:57

+0

如果你不需要监听过程结束,然后调用一个web服务将起作用。你只是没有回调。你打电话给服务来完成任务,而你不会等待回应。您确实需要一些方法来确定进程何时失败,例如日志记录。该服务可以是对不返回任何内容的Windows服务的WCF调用。看看WCF。我认为它可以做你需要的。 – DOK 2011-06-04 23:24:50

0

您可以在应用程序启动时启动进程,并在静态变量中保存对其的引用。您还需要附加到OutputDataReceived事件,以便您可以记录进程发送到其StandardOutput流的所有数据。

的想法是,该过程将在服务器上运行,且该Web应用程序会默默地记录它发送的任何信息。当请求到达时,缓冲区将被发送给用户并被清除。

用户也可以发送该web应用程序将通过其StandardInput流转发到处理命令。

我还没有尝试过,但它可能工作。您还需要考虑如果应用程序池回收会发生什么情况。为了获得最佳效果,我认为你应该禁用自动循环。

0

是的,这是最好的方式,使窗口服务,将控制和监控过程,并到该窗口服务API构建的ASP.NET(web表单)应用程序。

ASP.NET应用程序可以自动刷新页面(通过JavaScript或元刷新标签),并从控制您的进程的Windows服务获得新的状态,事件更好地构建JavaScript应用程序并获取新的状态数据并发送命令ajax,所以不需要整个页面刷新。