【发布时间】:2013-03-10 17:06:14
【问题描述】:
我将 WCF 服务设置为 PerCall
我想知道如何从客户端发送 Start 调用来启动一个长时间运行的进程,并发送 Cancel 命令来取消它
我的 WCF 服务看起来像这样
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class Service1 : IService1
{
CancellationTokenSource cancelToken = new CancellationTokenSource();
public void Start()
{
var compute = Task.Factory.StartNew(StartLongRunningTask, cancelToken.Token);
}
public void Stop()
{
cancelToken.Cancel();
}
private void StartLongRunningTask()
{
//process here
}
}
我想这里的问题是,每次调用到达服务器时,它都被视为一个新请求。
那么应该如何在 WCF 中启动和取消一个长时间运行的任务呢?
编辑:我将它作为 Windows 服务托管
【问题讨论】:
-
您必须将令牌存储在 WCF 类之外。主机可以在 WCF 请求之间重新启动,具体取决于主机;所以,你可能必须先处理这个问题。您可能必须拥有某种其他代币来查找您传递给 Stop 合约的取消代币来源。
-
当您说在 WCF 类之外时,您的意思是创建另一个 dll 来处理令牌,并由 WCF 项目引用这个 dll 吗?不会还是一样吧?
标签: c# .net wcf nettcpbinding long-running-processes