编辑/前言:此答案假定您只想将 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 或应用程序端点连接到接触点。
另外,如果一位用户尝试同时启动/停止导入过程等,我是否会遇到问题?
假设您正确设置了线程互操作,您将不会遇到问题。
单例模式是确保每个人都使用相同的单一导入过程的方法吗?
是的,这是完美的。