【问题标题】:Running console applications from a WCF service - where to host it?从 WCF 服务运行控制台应用程序 - 在哪里托管它?
【发布时间】:2014-05-25 02:52:33
【问题描述】:

目前正在为应用服务器开发 .NET 解决方案。我正在使用在带有 IIS 7.5 的 Windows Server 2008 R2 上运行的 .NET 4.0。

我的要求是:

  • 应用程序服务器可以按计划一次运行多个控制台应用程序 - Quartz.net 看起来是解决这个问题的一个非常好的解决方案 - 到目前为止对我来说效果很好

  • 应用程序服务器还将托管一个 Web 应用程序,该应用程序将报告作业(它们运行的​​时间、它们做了什么、它们花费了多长时间等)

  • 我希望能够重新启动正在运行我的作业的“服务”并从 Web 界面触发临时作业。

  • 运行我的作业的服务需要一直运行

  • 一旦启用,我将无法直接访问计算机以重新启动 Windows 服务,但我可能会设置 IIS 以便能够为我执行此操作。

WCF 服务对我来说看起来很有希望 - 但我不确定在哪里托管它。我当前的项目使用 WCF 服务来使用 Quartz.net 插件运行控制台应用程序。运行什么以及何时运行的配置存储在 oracle 数据库中,我的 WCF 服务直接连接到数据库以检索此信息(不确定这是否是 WCF 的预期用途)。

如果我在 IIS / WAS 中托管 WCF 服务,那么运行控制台应用程序可能是我所读到的安全问题。我至少可以使用 appFabric 让 WCF 服务一直运行。或者,我可以将它托管在 Windows 服务中,并允许我的 Web 应用程序使用 WCF 服务来报告作业。我担心使用 Windows 服务,因为我无法直接维护这台机器,如果它坏了,我就有麻烦了。我真的很希望能够从 Web 应用程序进行维护。考虑到它可以从 IIS 托管,Windows 服务也感觉有点不必要。

所以我的问题是 - WCF 服务是解决这个问题的正确方法还是有人能想到更好的方法?

如果 WCF 服务是一种好方法 - 我应该在哪里托管它,以便我可以通过 Web 界面执行维护,因为我无法直接访问机器本身?

WCF 服务应该是启动和调度作业的服务吗?

【问题讨论】:

    标签: c# .net wcf iis-7.5 quartz.net


    【解决方案1】:

    我认为你可能过度设计了它。

    问题:您有一个需要临时启动作业的网站。其他作业将按固定时间表运行。该网站将报告所有/任何这些工作。

    对于运行计划作业,使用 Quartz 的 Windows 服务确实是固定计划部分的理想解决方案。但是,要报告这些工作,数据必须由服务收集并提供。可以将服务设置为在失败时重新启动,因此您可以保证它将始终运行(除非它在失败时重新启动一两分钟 - 为什么要这样做?但是,除非服务,否则任何历史记录都将丢失将其存储在某个地方,重新启动后可以检索它。

    网站获取历史记录的更简单的解决方案是让服务将其数据写入数据库。那么重启就不用担心了:所有的历史都已经保存好了,数据可以随时被网站读取。

    同样,如果网站直接与服务对话(作为 WCF 服务或其他方式),那么如果服务当前未运行,会发生什么情况?在重新启动完成之前,请求会失败。让用户感到沮丧。或者,网站将请求放入数据库。该服务监视数据库的请求,并在看到新请求时适当地启动作业。如果在服务未运行时写入请求,则当服务重新启动时,它将在 DB 中查看请求并执行它们。

    所以我认为使用 WCF 服务有点矫枉过正,实际上会引入一些问题:历史的持久性,以及如何处理服务关闭时发出的请求。如果你按照我描述的方式进行,这些问题就不会出现。

    干杯-

    【讨论】:

    • 感谢您的回复,我认为您是对的。不过我有点失望,因为我真的很期待设计一些非常酷的东西......现在它是如此的实用和乏味
    猜你喜欢
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多