代码之家  ›  专栏  ›  技术社区  ›  eulerfx

开发c#长时间运行处理器应用程序的最佳方法

  •  2
  • eulerfx  · 技术社区  · 18 年前

    我有几个不同的c#worker应用程序,它们运行各种连续任务:从队列发送电子邮件、将新订单从网站数据库导入订单数据库、进行数据库备份和恢复、为OLTP运行数据处理->OLAP和其他相关任务。以前,我将其作为windows服务发布,但现在我将其作为常规控制台应用程序发布。它们都基于我创建的通用任务运行器框架,对此我很满意,但是我不确定部署这些类型应用程序的最佳方式是什么。我喜欢控制台版本,因为它快速简单,并且可以快速查看程序活动和输出。不利的一面是,工人计算机有几个控制台屏幕在运行,它变得凌乱。另一方面,部署服务方法似乎需要很长时间,我必须查看事件日志才能看到消息。对此有哪些经验/评论?

    8 回复  |  直到 18 年前
        1
  •  2
  •   Dave Neeley    18 年前

    我喜欢控制台应用程序的方法。我通常会设置一些东西,这样我就可以通过一个开关,比如-无人值守,它会抑制控制台屏幕。

        2
  •  1
  •   Ray Lu    18 年前

    Windows服务将是一个不错的选择,它在后台运行,无论您是否关闭当前会话,您也可以将其配置为在Windows重新启动后在服务器上执行修补程序更新时自动启动。您可以将重要消息记录到事件查看器或数据库表中。

        3
  •  1
  •   Patrik Svensson Martin Ender    18 年前

    对于这样的事情,标准的方法是使用Windows服务。您希望该服务在网络帐户上运行,因此不需要登录用户。

        4
  •  1
  •   Ray Hayes    18 年前

    几年前我做过一件类似的事情。从逻辑上讲,我需要一个服务,但有时我需要看看发生了什么,通常我想要一个历史。所以我开发了一个服务来完成这项工作,它在任何时候想要记录日志,就调用它的订户(实现为一个观察者模式)。

    该服务注册了自己的数据记录器(写入数据库),在运行时,用户可以运行一个GUI,通过远程处理连接到该服务,从而成为一个实时侦听器!

        5
  •  1
  •   Eric Z Beard    18 年前

    我将投票支持Windows服务。管理这些控制台应用程序将是一件非常痛苦的事情。

    Windows服务部署很简单:初始安装后,您只需关闭它们并执行XCOPY。无需运行任何复杂的安装程序。第一次它只是半复杂的,即使在那时它也只是

    installutil MyApp.exe
    

    将服务配置为在域帐户下运行,以实现最佳安全性和与其他计算机的最简单互操作。

    对重要通知使用事件日志(包含错误、警告和信息)的组合,只需将详细日志转储到文本文件。

        6
  •  1
  •   Taliesin    14 年前


    http://topshelf-project.com/

    它将允许您以命令行或windows服务的形式运行程序。

        7
  •  0
  •   Nidhi    17 年前

        8
  •  0
  •   Walden Leverich    17 年前

    我们经常使用windows服务作为后台进程。我不喜欢命令行应用程序,因为您需要登录服务器才能运行它们。服务一直在后台运行(假设它们是自动启动的)。在windows中安装sc.exe命令行工具也很简单。与installutil.exe相比,我更喜欢它。当然installutil做的更多,但我不需要它做什么。我只想注册我的服务。

    我们还创建了一个基础设施,其中有一个基于接口定义加载.DLL的通用服务.exe,因此添加一个新的“服务”就像放入一个新的DLL并重新启动服务主机一样简单。

    然而,我们开始远离服务。我们的问题是,它们会锁定DLL(原因很明显),因此升级它们很痛苦。我们需要停止,升级,然后重新启动。不难,但需要额外的步骤。相反,我们在asp.net应用程序中移动到特殊的“页面”,这些页面运行我们需要完成的实际后台工作。仍然有一个服务,但它所做的一切都是调用asp.net页面,这样它就不会锁定任何DLL。然后,我们可以替换asp.net bin目录中的DLL以及应用程序域重新启动的正常asp.net规则。

    推荐文章