【问题标题】:choosing between a Windows service and a web app在 Windows 服务和 Web 应用程序之间进行选择
【发布时间】:2013-06-18 20:10:21
【问题描述】:

我们有一个 ASP.NET 网站,用户可以在其中向数据库添加项目。 同一台服务器上有多个站点,每个站点都有自己的数据库。

我需要实现一种机制来检查数据库中每个项目的状态。 如果项目未处理,请将其提交给第三方网络服务。

我看到两个选项:

  1. 将代码放入 webapp
  2. 将代码放入 Windows 服务中

第一个选项的优点是代码知道要连接到哪个数据库。

使用 Windows 服务,它必须了解所有数据库,因此更难维护。另外,如果我只有一个 Windows 服务,它必须使用线程来并行处理每个数据库中的项目。

也许除了这两个之外还有其他方法?

还有哪些其他问题,您有什么建议? 请解释您的选择。

【问题讨论】:

    标签: asp.net windows-services


    【解决方案1】:

    这听起来像是涉及消息队列的好地方。每个项目将被包装成一条消息并放入队列中。 “项目处理器”(服务?)将订阅队列并在每个项目到达时使用它执行一些工作。消息如何放入队列取决于您,但例如,您可以让每个站点将“新项目”消息发布到队列。

    队列起初可能是一个令人生畏的概念,但 MassTransit 等框架可以提供帮助。值得学习。

    【讨论】:

    • 这也是我最初的反应。
    • 是的,需要一个类似队列的机制。我需要的是一些提示选择什么。我会去 MassTransit 看看,谢谢你提到它。我前段时间与 MSMQ 合作过。不确定今天 MSMQ 的当前状态是什么。请参阅我对上面其他帖子的评论,以更好地了解我在做什么。
    • 顺便说一句,即使使用 MassTransit,正如我在问题中提到的那样,我仍然需要选择放置它的位置。因此,如果您能提出建议,那就太好了。
    • 您可以在任何地方托管队列处理器。我认为将它包装到 Windows 服务中是最合适的,但如果需要,您可以在 Web 应用程序中运行它。 MSMQ 仍然相关。 MassTransit 和 NServiceBus 等框架将管道抽象化,使开发和测试更容易。
    【解决方案2】:

    我认为与 Web 应用程序相比,Windows 服务是一个不错的选择,主要是因为 Web 应用程序必须由某人手动触发,而 Windows 服务可以随时运行,检查更新。

    如果您可以访问每个现有网站的代码,还有另一种选择。为什么不编写一个将数据提交给第三方 Web 服务的 Web 服务。然后在现有的每个网站中,修改数据库中存储更改的逻辑,以便将更改也发布到您的自定义 Web Service(甚至跳过自定义 WS,直接调用第三方)。

    【讨论】:

    • 我看到直接发布到第三方网络服务的不同问题。我过度简化了这个想法,但基本上这是一个需要上传视频、开始编码作业、获取编码作业状态等的过程(它是 Azure 媒体服务)。我需要考虑站点重新启动后的恢复机制。与直接发布相比,我认为根据需要触发每个步骤并仅从 Azure 媒体服务轮询状态更容易。
    • 除了windows服务没有其他选择吗?例如,我在 IIS 7.5 中看到应用程序和池的启动模式选项称为“AlwaysRunning”。它看起来像我需要的。 blogs.iis.net/wadeh/archive/2012/05/01/…
    • 遗憾的是这个功能只在 applicationHost.config 中可用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多