.net Windows服务应用程序体系结构
我需要创建一些Windows服务应用程序(C#),这些应用程序应该执行一些定期执行并相互绑定的任务,例如:.net Windows服务应用程序体系结构,.net,architecture,windows-services,.net,Architecture,Windows Services,我需要创建一些Windows服务应用程序(C#),这些应用程序应该执行一些定期执行并相互绑定的任务,例如: 注意文件夹更改 将文件发送到Web服务(Web API) 写日志并保存在本地数据库中 所以我想知道我是否可以使用“快速而肮脏”的方法,并使用BackgroundWorker类实现所有这些,或者我是否使用了更复杂的东西,比如任务y等等()。或者有一些框架可以做到这一点 任何关于该应用程序可能的现代而干净的结构的建议都会很好。多谢各位 我将使用worker来实现,如果您希望实现规模化或现代架构
BackgroundWorker
类实现所有这些,或者我是否使用了更复杂的东西,比如任务
y等等()。或者有一些框架可以做到这一点
任何关于该应用程序可能的现代而干净的结构的建议都会很好。多谢各位 我将使用worker来实现,如果您希望实现规模化或现代架构,那么请使用类似Azure的云。通过使用Azure,您可以通过使用Azure队列来实现it。一名工作人员将观察更改,然后将更改排队。另一个用于使用队列将文件发送到web Api的工作程序。日志记录您可以作为另一个worker完成,也可以使用同一个worker完成。我将使用worker进行实现,如果您希望扩展或采用现代体系结构,那么请使用类似于Azure的云。通过使用Azure,您可以通过使用Azure队列来实现it。一名工作人员将观察更改,然后将更改排队。另一个用于使用队列将文件发送到web Api的工作程序。日志记录您可以作为另一个工作线程来完成,也可以使用同一个工作线程来完成。典型的方法是创建一个线程来处理信息
public partial class Service1 : ServiceBase
{
private Timer _timer;
public Service1()
{
InitializeComponent();
_timer = new Timer(OnDoStuff);
}
protected override void OnStart(string[] args)
{
_timer.Change(5000, Timeout.Infinite);
}
protected override void OnStop()
{
_timer.Change(Timeout.Infinite, Timeout.Infinite);
}
protected void OnDoStuff(object state)
{
//do your things here.
//activate the timer again.
_timer.Change(5000, Timeout.Infinite);
}
}
仅使用Change
方法中的第一个参数作为计时器,这意味着计时器每5秒只运行一次。通过使用该方法,我们可以确保如果第一次调用没有在5秒内完成,计时器不会再次并行启动
另外请注意,如果OnDoStuff
中存在未处理的异常,应用程序将崩溃,因此请确保您使用的是try/catch
除此之外,使用windows服务似乎可以完成此任务。典型的方法是创建一个线程来处理信息
public partial class Service1 : ServiceBase
{
private Timer _timer;
public Service1()
{
InitializeComponent();
_timer = new Timer(OnDoStuff);
}
protected override void OnStart(string[] args)
{
_timer.Change(5000, Timeout.Infinite);
}
protected override void OnStop()
{
_timer.Change(Timeout.Infinite, Timeout.Infinite);
}
protected void OnDoStuff(object state)
{
//do your things here.
//activate the timer again.
_timer.Change(5000, Timeout.Infinite);
}
}
仅使用Change
方法中的第一个参数作为计时器,这意味着计时器每5秒只运行一次。通过使用该方法,我们可以确保如果第一次调用没有在5秒内完成,计时器不会再次并行启动
另外请注意,如果OnDoStuff
中存在未处理的异常,应用程序将崩溃,因此请确保您使用的是try/catch
除此之外,使用windows服务似乎可以完成此任务。听起来您需要在专用服务器上使用此服务。所以我的第一个建议是使用。这使得整合现代Windows服务变得如此简单,简直可笑 然后,为了执行问题中的步骤,我将使用某种工作流模式。看起来很现代,足以满足这一需求。(就我个人而言,我只是使用责任链模式和DI容器作为我的快捷和“肮脏”) 最后,将其与启动工作流的事件驱动方法相结合,例如,您甚至不需要担心后台工作人员等
因此,通过这些架构决策,您的服务将易于设置、运行、测试和安装(TopShelf),您可以模块化地构建和单元测试您的服务(工作流模式)。听起来您需要在专用服务器上实现这一点。所以我的第一个建议是使用。这使得整合现代Windows服务变得如此简单,简直可笑 然后,为了执行问题中的步骤,我将使用某种工作流模式。看起来很现代,足以满足这一需求。(就我个人而言,我只是使用责任链模式和DI容器作为我的快捷和“肮脏”) 最后,将其与启动工作流的事件驱动方法相结合,例如,您甚至不需要担心后台工作人员等 因此,通过这些架构决策,您的服务将易于设置、运行、测试和安装(TopShelf),并且您可以模块化地构建和单元测试您的服务(工作流模式)