Dev*_*Dev 2 design-patterns windows-services
我有一个Windows服务来完成后台进程.这个Windows服务将与asp.net网站互动.功能如下.
在我的网站上有3个动作.用户可以选择任务(假设有三个按钮).然后它将调用Windows服务.其余操作由Windows服务执行.用户可以从网站注销,但它将在后台运行该服务.一旦完成,它将在数据库中进行相应的更改.我需要知道是否可以将任何设计模式应用于Windows服务(工厂,抽象工厂等).我已经阅读了不同的设计模式,但我对这如何应用于项目感到困惑.目前我在Windows服务的'OnStart'和'OnStop'事件中编写完整的代码.请指导我.
谢谢.
我安装多个服务实例的唯一时间是针对多个环境,例如开发,测试和生产.否则,它应保留在同一服务中,假设所有代码在逻辑上相关.
至于设计模式,我一直在为我创建的大多数服务遵循一个简单的"模式".我鼓励回答,因为我自己不知道这是一个好的模式.它主要涉及创建一个立即启动的主线程,以及基于需要完成的子线程.对于您的情况,下面可能是用户处理器的简单服务布局.
服务类:
public partial class Service : ServiceBase
{
private Processor _processor;
public Service() { InitializeComponent(); }
protected override void OnStart(string[] args)
{
_processor = new Processor();
new System.Threading.Thread(_processor.Run).Start();
}
protected override void OnStop()
{
_processor.Stop();
}
}
Run Code Online (Sandbox Code Playgroud)
处理器:
public class Processor
{
private bool _continue;
private List<UserProcessor> _userProcessors; // List of users being processed.
public void Run()
{
_continue = true;
while (_continue)
{
var users = getUsersToProcess();
foreach (User user in users)
{
if (_userProcessors.Any(u => u.UserId == user.UserId) == false)
{
// Start a new processor for the user since it wasn't found.
var processor = new UserProcessor(user);
new System.Threading.Thread(processor.Run).Start();
_userProcessors.Add(processor);
}
}
System.Threading.Thread.Sleep(1000);
}
}
public void Stop()
{
_continue = false;
foreach (var processer in _userProcessors)
processer.Stop();
}
private List<User> getUsersToProcess() { throw new NotImplementedException(); }
}
Run Code Online (Sandbox Code Playgroud)
当然,UserProcessor几乎与Processor相同,但在while循环中有不同的代码.这是你进行数据库交互的地方,但我会让你想出这一部分.
| 归档时间: |
|
| 查看次数: |
2077 次 |
| 最近记录: |