WCF 是否是长数据导入过程的正确选择?

本文关键字:选择 过程 是否是 数据 导入 WCF | 更新日期: 2023-09-27 18:31:28

我目前正在为我们的业务创建一个流程,该流程从数据库(A)中获取一些数据,对数据进行一些处理,然后将其复制到另一个数据库(B)中的另一个表中。我们正在处理大量数据,我们预计此过程需要很长时间(数周)。

对于此类任务,使用 WCF 是否是明智的设计选择?这样,我认为我可以拥有某种客户端应用程序/Web前端(其他业务可以使用)来"查询"/显示整个导入过程的进度。我还想让客户能够通过该服务启动/暂停/停止导入过程。

这在 WCF 中可行吗?这甚至是正确的选择吗?我想在某些方面,这需要像常规的 Windows 服务一样运行(我只是认为通过我可以通过 WCF 公开的一些方法来"查询"导入进度会更容易?

另外,我会遇到问题,例如,如果一个用户尝试同时启动/停止导入过程等?单例模式是否适合确保每个人都使用相同的单一导入过程?

任何想法/想法都非常感谢。

WCF 是否是长数据导入过程的正确选择?

编辑/前言:此答案假定您只想将 WCF 用于用户与进程的交互,而不是用于整个软件堆栈的通信,并且核心工作由长时间运行的服务本身完成。

是的,这在 WCF 中是可行的,这可能是正确的解决方案。你将有一个长时间运行的处理器线程,该线程经常查询/更新一组互操作属性(例如,它将更新已完成的百分比、它正在处理的项目,并检查"暂停"标志等)。WCF 接口方法将依次查询/设置这些属性。

单例模式非常适合此 - 如果线程设置正确,用户将与长时间运行的线程(或线程)检查的某些属性进行交互。

从极高级别的角度来看,处理器类的核心可能看起来像这样(这只是如何完成的模型;不要完全这样,否则我会做噩梦):

// IWcfProcessor is the ServiceContract interface
// Processor runs as a singleton and does (or has a thread that does) the processing work
class Processor : IWcfProcessor
{
    public Processor()
    {
        new Thread(Process).Start();
    }
    public void Process()
    {
        while (Run)
        {
            // Do long-running process stuff, update some tables
            PercentDone += 0.1;
        }
    }
    public decimal PercentDone { get; set; }
    public bool Run { get; set; }
    /// WCF method defined in IWcfProcessor
    public void SetState(bool state)
    {
        Run = state;
    }
    /// WCF method defined in IWcfProcessor
    public decimal GetStatus()
    {
        return PercentDone;
    }
}

然后,可以从 Web 或应用程序终结点挂钩到IWcfProcessor接触点。

另外,我会遇到问题,例如,如果一个用户尝试同时启动/停止导入过程等?

假设正确设置了线程互操作,则不会有问题。

单例模式是否适合确保每个人都使用相同的单一导入过程?

是的,这是完美的。

是的。这可以与 WCF 流式处理一起使用。在这里,看看我对另一个类似问题的回答。