【问题标题】:Control a process using webforms使用 Web 表单控制流程
【发布时间】:2011-06-04 20:30:58
【问题描述】:

我试图在这里找到一种解决方案来控制我通过网络表单启动的进程。

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

我想要实现的是将数据发送到进程(泰拉瑞亚服务器)。基本上,服务器本身在正确启动后,您可以在其中编写一些命令,例如 kick/ban/save/exit 等。

我想编写这些命令,但通过 webforms 应用程序进行远程控制。

我认为最近的解决方案是通过我编写的守护程序调用服务器,该守护程序将用作 webforms 命令和服务器应用程序之间的网关。这是做事的正确方法吗?或者有什么更简单的方法吗?

【问题讨论】:

    标签: c# .net-4.0 process webforms


    【解决方案1】:

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

    MSDN site 有一些示例可以帮助您确定这是否适合您。

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

    【讨论】:

    • 这个想法不错,但问题是它不能永远听(因为它毕竟是一个网站)
    • 如果您不需要监听进程结束,那么调用 Web 服务就可以了。你只是没有回调。您调用该服务来完成它的任务,而无需等待响应。您确实需要某种方法来确定进程何时失败,例如日志记录。该服务可以是对不返回任何内容的 Windows 服务的 WCF 调用。查看 WCF。我认为它可以满足您的需求。
    【解决方案2】:

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

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

    用户还可以发送命令,Web 应用程序将通过其StandardInput 流将这些命令转发给进程。

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

    【讨论】:

      【解决方案3】:

      是的,这是最好的方法,将控制和监视进程的 Windows 服务构建到用于 ASP.NET(webforms)应用程序的 Windows 服务构建 API 中。

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

      【讨论】:

        猜你喜欢
        • 2015-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多