Multithreading 分层体系结构中的Windows服务层

Multithreading 分层体系结构中的Windows服务层,multithreading,windows-services,3-tier,Multithreading,Windows Services,3 Tier,我有一个asp.net项目,它是使用分层体系结构(表示层、业务层和数据访问层)创建的。现在我需要向项目中添加一个windows服务,该服务将执行后台处理。用户可以从站点注销,但服务将在后台运行。完成这项任务可能需要几个小时。我有以下问题 我可以将此windows服务作为单独的项目包含在asp.net web应用程序中吗?如果是,应在何处添加?此windows服务可以从业务层调用。该服务将与数据库交互。那么我可以将其添加为单独的服务层吗 正如我所说的,windows服务将在后台工作,因此我可以在w

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

  • 我可以将此windows服务作为单独的项目包含在asp.net web应用程序中吗?如果是,应在何处添加?此windows服务可以从业务层调用。该服务将与数据库交互。那么我可以将其添加为单独的服务层吗

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


  • 谢谢。

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

    关于服务将要做什么,你说得还不够,但我希望如此

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

    服务中的OnStart应该启动侦听器线程

    然后,当服务“听到”登录(用户id)通知时,它会执行如下操作

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

    无论如何,这类事情…

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

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

    您可能希望从这里获得更清晰的图层图片