【问题标题】:Windows service as Service Layer in layered architectureWindows 服务作为分层架构中的服务层
【发布时间】:2014-02-05 12:46:43
【问题描述】:

我有一个使用分层架构(演示、业务和数据访问层)创建的 asp.net 项目。现在我需要向项目中添加一个 Windows 服务,该服务将执行后台进程。用户可以从站点注销,但该服务将在后台运行。完成任务可能需要几个小时。我有以下问题。

  1. 我能否将此 Windows 服务作为一个单独的项目包含在我的 asp.net Web 应用程序中?如果是这样,应该在哪里添加?这个windows服务可以从业务层调用。该服务将与数据库交互。那么我可以将它添加为单独的服务层吗?

  2. 正如我所说,Windows 服务将在后台运行,因此我可以在 Windows 服务的“OnStart”事件中创建线程来执行操作。我对么?我知道在“OnStart”事件中编写长时间运行的进程不是一个好习惯。这就是我使用线程的原因。但是,如果另一个用户登录到该网站,该服务将再次调用并创建新的工作线程。这种方法是否存在性能问题?

谢谢。

【问题讨论】:

    标签: multithreading windows-services 3-tier


    【解决方案1】:

    我个人会将服务放在它自己的解决方案中。我会在网络解决方案中放置一个客户端。主要是因为部署将完全不同,并有助于保持服务 API 不受损坏。

    您没有充分说明该服务将要做什么,但我希望。

    当用户登录时,将向服务发送通知。登录(user_Id)

    服务中的 OnStart 应该启动一个 Listener 线程

    然后,当服务“听到”登录(User_id)通知时,它会执行类似的操作

    if (LogInTaskThread == null)
    {
      LoginTaskThread = new Task("loginTask");
    }
    

    反正就是那种东西……

    【讨论】:

      【解决方案2】:

      如果 Windows 服务在后台运行并且不处理来自外部调用者的任何请求,那么您可以将 Windows 服务应用程序视为一种无 UI 表示层的形式。它应该放在一个单独的项目中,并像任何应用程序一样与业务和数据层进行通信。

      但是,如果您的 Windows 服务正在为来自外部程序的调用提供服务,那么您可能需要将您的 Windows 服务视为服务层。

      您可能希望从这里获得更清晰的图层图片 http://serena-yeoh.blogspot.com/2013/06/layered-architecture-for-net.html

      【讨论】:

        猜你喜欢
        • 2014-04-13
        • 2021-09-08
        • 2011-11-20
        • 2012-02-12
        • 2016-08-11
        • 2023-03-27
        • 2023-03-31
        • 2017-07-05
        • 2011-05-05
        相关资源
        最近更新 更多