6

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

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

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

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

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

4

2 回答 2

2

编辑/前言:此答案假定您只想将 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;
    }
}

IWcfProcessor然后,您可以从 Web 或应用程序端点连接到接触点。

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

假设您正确设置了线程互操作,您将不会遇到问题。

单例模式是确保每个人都使用相同的单一导入过程的方法吗?

是的,这是完美的。

于 2012-04-17T15:14:06.290 回答
2

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

于 2012-04-17T15:41:40.863 回答