Windows服务作为分层体系结构中的服务层

时间:2014-01-16 14:35:59

标签: multithreading windows-services 3-tier

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

  1. 我可以在我的asp.net Web应用程序中将此Windows服务作为单独的项目包含在内吗?如果是这样的话应该添加?此Windows服务可以从业务层调用。该服务将与数据库进行交互。我可以将其添加为单独的服务层吗?

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

  3. 感谢。

2 个答案:

答案 0 :(得分:1)

我个人将服务放在自己的解决方案中。我将客户端放在Web解决方案中。主要是因为部署将完全不同,并有助于保持服务API不被破坏。

你还没有详细说明该服务会做什么,但我期待。

用户登录时,会向服务发送通知。登录(USER_ID)

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

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

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

无论如何......

答案 1 :(得分:0)

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

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

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