如何设计可以启动Task异步并获取状态的WCF服务

时间:2012-01-24 13:01:08

标签: .net wcf architecture

我想创建一个WCF服务,它将启动一个长时间运行的任务,并具有查询线程状态的可能性。

我的想法是创建一个实现此接口的类

public interface IProcess
{
    ProcessStatus GetStatus();
    void AsyncStartDataProcess();
}

AsyncStartDataProcess将创建一个新线程,该线程将运行一个方法来执行一些长时间运行的任务。

然后在WCF服务中有一个IProcess类型的静态对象:

public static IProcess ActiveProcess = ProcessFactory.CreateNewProcess();

然后通过ServiceContract公开两种方法:

StatusResponse GetStatus();
StartProcessResponse StartProcess();

StartProcess方法会调用ActiveProcess.AsyncStartDataProcess()GetStatus会调用ActiveProcess.GetStatus()

每个请求只有一个活动进程。 将从ASP.NET Web应用程序访问GetStatus和StartProcess,并且可以由多个用户访问它。

我在调用WCF服务期间启动长时间运行的线程是否会导致任何问题? (响应将到达客户端,线程将继续运行?)

在这种情况下,我应该更好地使用单例实例吗?如果是,那么之前的问题是适用于这种情况吗?

1 个答案:

答案 0 :(得分:1)

我认为您的服务合同设计合理( IF 您完全确定只会有一个长期运行的任务)。但我不会在实现该服务的类中执行长时间运行的任务。我会将它分解为另一个组件。

如果您有多个长时间运行的流程,则可以执行以下操作:

public interface IProcess
{
    ProcessStatus GetStatus(Guid id);     
    Guid AsyncStartDataProcess();
}