0

我必须构建一个 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
    }

如果我没有任何意义,请告诉我,我愿意探索一种全新的方法。

代码示例将有所帮助。

提前谢谢大家!

4

1 回答 1

1

好吧,我将编写架构的东西,以便应用程序在未来保持可扩展性。

使用的模式:依赖注入

创建一个名为IDatabaseSources的接口并在不同的数据源类中实现该接口

IDatabaseSource 接口的示例方法是 Connect(),FetchData()。当您在实现的类中编写 connect 方法时,从 web.config 中获取连接字符串。

public class SQLDataSource:IDatabaseSources { 将拥有接口中定义的所有方法}

public class SQLDataSource2:IDatabaseSources{ 将拥有接口中定义的所有方法}

创建一个名为IFTPSources的接口并在不同的类中实现该接口。

IDatabaseSource 接口的示例方法是 Connect(),SendData()。当您在实现的类中编写 connect 方法时,从 web.config 中获取 FTP 信息。

public class FTPSource1:IFTPSources{ 将拥有接口中定义的所有方法}

public class FTPSource2:IFTPSources{ 将拥有接口中定义的所有方法}

此外,这些依赖项应该根据您的调度程序注入到 Windows 服务中

虽然如果有 10 个 FTP 目标,那么您将有 10 个 FTP 源类。是的,它增加了类的数量,但这就是单一责任原则加上这样您就可以维护/扩展应用程序的方式。

于 2013-02-14T23:47:38.963 回答