【问题标题】:Start long running process on webserver startup?在网络服务器启动时启动长时间运行的进程?
【发布时间】:2012-09-28 01:05:00
【问题描述】:

我已经离开网络开发 6/7 年了,我完全不知道如何做事。我正在阅读一些关于 HTML5 之类的教程,但我希望能在这里得到帮助。

我正在尝试构建一个 (POC) 网站,该网站将让“服务器”监控它正在运行的应用程序,并在某个应用程序运行时更改托管页面的内容。我不希望模型是PageLoad->Application Check,我宁愿有ServerStart->ApplicationHook->Callback->Model->PageLoad->CheckModel之类的东西,所以在服务器启动时会放置一个钩子并且钩子的回调会更新页面用来更新的模型。虽然这种架构可能不是最好的方法,但总的来说,我只是在寻找一种方法来让服务器启动时启动一个长时间运行的进程。最终,我会将其移至 Windows 服务,该服务在进行更改时调用 Web 服务,但对于 POC,我宁愿远离多个应用程序交互,因为 Windows 服务也需要由服务器“调用”并且目前我想不出一个简单的实现方法。

因此,如果您要构建的页面依赖于服务器上的事件,并且需要能够与服务器上的应用程序单独交互到单个页面,但该页面需要能够“发布”回信息到那个应用程序你会怎么做?

我的解释有点过头了,所以我希望在某个时候我的问题能清楚地表达出来! :)

【问题讨论】:

    标签: c# asp.net asp.net-mvc web-applications web


    【解决方案1】:

    也许还有其他选择,但我认为这种设置的唯一选择是 Windows 服务。如果您需要从其他组件与其通信,请让它使用套接字或在已知端口上侦听 HTTP 请求。从 Web 应用程序中执行您所描述的操作并非不可能,但肯定会非常困难,因为它是 Web 服务器(应用程序池可执行文件)控制过程中发生的事情,而不是您的代码。在 Windows 服务中,一切尽在您的掌控之中。

    编辑:这里有一个article,关于托管 Web 服务的不同选项 - 在我看来,使用 Windows 服务确实是您的最佳选择。您可能可以使用 WCF 服务,但您必须与服务器上的本地应用程序通信,而这部分可能仅使用 Windows 服务更容易完成。

    【讨论】:

    • 如何让托管在我的 Windows 服务中的 WCF 服务监视我的应用程序?我找不到 WCF 的启动项...或者我应该让 Windows 服务完成这项工作吗?如果是,如何让 WCF 服务和 Windows 服务相互通信?
    • @Vijay 我对 WCF 不是很熟悉,所以我无法回答你的那部分问题。我只是创建一个独立的 Windows 服务,然后让它监听一个端口。必要时,WCF 服务可以打开该端口并向 Windows 服务发送消息。关键是 Web 应用程序在应用程序池中运行,如果应用程序池被回收,则 Web 应用程序也被回收。另外,应用程序池可能在第一个请求之前不会启动。如果您需要在启动时运行的服务,Windows 服务是您的最佳选择。
    • @Vijay 我用文章链接编辑了答案,看看是否有帮助。
    猜你喜欢
    • 2020-02-04
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 2013-09-05
    • 2011-02-08
    • 1970-01-01
    • 2011-08-09
    相关资源
    最近更新 更多