C# 用于多个客户端数据库和FTP帐户的通用Windows服务
我必须构建一个windows服务,从n个客户端数据库获取数据,将结果集转换为XLS格式,并以客户端指定的时间间隔将其发送到相应的(特定于客户端的)FTP帐户 这里有另一种说法: 同一Windows服务将连接到多个数据库,将文件发送到不同的FTP帐户,并根据其连接到的客户端数据库以不同的时间间隔运行 我的问题是,我应该如何设计它,使它能够灵活地处理多个场景,并且更具可配置性 这背后的基本思想是,当新客户机请求相同的服务时,尽量减少将来的实现时间 我正在考虑以下想法,其中可以将单个客户端设置为单独的工作线程。我知道这种方法有严重的问题,但似乎无法找到最好的方法 以下是部分代码:C# 用于多个客户端数据库和FTP帐户的通用Windows服务,c#,.net,multithreading,windows-services,C#,.net,Multithreading,Windows Services,我必须构建一个windows服务,从n个客户端数据库获取数据,将结果集转换为XLS格式,并以客户端指定的时间间隔将其发送到相应的(特定于客户端的)FTP帐户 这里有另一种说法: 同一Windows服务将连接到多个数据库,将文件发送到不同的FTP帐户,并根据其连接到的客户端数据库以不同的时间间隔运行 我的问题是,我应该如何设计它,使它能够灵活地处理多个场景,并且更具可配置性 这背后的基本思想是,当新客户机请求相同的服务时,尽量减少将来的实现时间 我正在考虑以下想法,其中可以将单个客户端设置为单独的
private static void Main(string[] args)
{
// Initialize the first worker thread.
NewUserThread newUserThread = new NewUserThread();
// Specify properties of this worker thread.
newUserThread.Name = "New User Check";
newUserThread.Delay = 0;
newUserThread.Interval = 2 * 60 * 1000;
// Initialize the second worker thread.
UserUpdateThread userUpdateThread = new UserUpdateThread();
// Specify properties of this worker thread.
userUpdateThread.Name = "User Update Check";
userUpdateThread.Delay = 30 * 1000;
userUpdateThread.Interval= 5 * 60 * 1000;
// Initialize the first Windows service objects.
WindowsService userCheckService = new WindowsService();
userCheckService.ServiceName = UserCheckServiceName;
// Initialize the second Windows service objects.
WindowsService emailService = new WindowsService();
emailService.ServiceName = EmailServiceName;
// Add services to an array.
ServiceBase[] services = new ServiceBase[]
{
userCheckService,
emailService,
};
// Launch services.
SendFiles("Launching services...");
Run(services, args);
}
internal static void (string message, params object[] args)
{
// Call to DB
// Convert dataset to XLS
// Send to FTP
}
如果我没有任何意义,请告诉我,我愿意探索一种全新的方法
代码示例将有所帮助
提前谢谢大家 好吧,我要写一些架构方面的东西,以便应用程序在将来保持可扩展性 使用的模式:依赖注入 制作一个名为IDatabaseSources的接口,并在不同的数据源类中实现该接口 IDatabaseSource接口的示例方法是Connect(),FetchData()。在实现的类中编程connect方法时,请从web.config获取连接字符串 公共类SQLDataSource:IDatabaseSources{将拥有接口中定义的所有方法} 公共类SQLDataSource2:IDatabaseSources{将拥有接口中定义的所有方法} 创建一个名为IFTPSources的接口,并在不同的类中实现该接口 IDatabaseSource接口的示例方法是Connect()、SendData()。在实现的类中编程connect方法时,请从web.config获取FTP信息 公共类FTPSource1:iftpources{将具有接口}中定义的所有方法 公共类FTPSource2:IFTPSources{将具有接口}中定义的所有方法 此外,这些依赖项应该按照您的计划程序注入windows服务中
虽然如果有10个FTP目的地,那么您将有10个FTP源类。是的,它增加了类的数量,但这就是单一责任原则,而且这样您就可以维护/扩展应用程序了。Hi Chief,由于我必须满足项目的一些要求,我无法使用此设置,但我觉得它是一个很好的体系结构,我将在另一个项目中记住这一点+1.