从WCF服务运行控制台应用程序 - 在哪里托管它?

时间:2014-04-11 05:36:47

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

目前正在为应用服务器开发.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应用程序进行维护。 Windows服务也有点不必要,因为它可以从IIS托管。

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

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

WCF服务应该是启动和安排作业的服务吗?

1 个答案:

答案 0 :(得分:1)

我认为你可能会过度工程化。

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

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

获取历史记录的网站的简单解决方案是服务将其数据写入数据库。然后它不用担心重启:所有历史记录都已保存,网站可以随时读取数据。

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

所以我认为使用WCF服务是过度的,实际上会引入一些问题:历史的持久性,以及在服务停止时如何处理请求。如果你采用我所描述的方式,这些问题就不会出现。

干杯 -