c# – 从客户端通过WCF取消长时间运行的任务
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 从客户端通过WCF取消长时间运行的任务,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1352字,纯文字阅读大概需要2分钟。
内容图文
![c# – 从客户端通过WCF取消长时间运行的任务](/upload/InfoBanner/zyjiaocheng/803/37601920a7e04a13a5da8c4e625dfede.jpg)
我有一个设置为PerCall的WCF服务
我想知道如何从客户端发送一个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服务托管
解决方法:
I have a WCF service set to PerCall
… the problem here is that, each time a call comes to the server, it’s treated as a new request.
是的,这正是你要告诉它的事情.如果可以,只需更改为InstanceContextMode.PerSession;那么你可以做你想做的事情(假设你是自托管的).
如果你不能这样做,那么你将不得不开发一个更复杂的解决方案,如@PeterRitchie评论.首先,您的主机:IIS不是设计为独立于请求的长期运行操作,所以我假设您是自托管的.接下来,您将需要一种令牌形式(如GUID),它将充当长时间运行的操作的标识符.您的Start方法将分配GUID和CancellationTokenSource并启动操作,您的Stop方法将采用GUID并使用它来查找CancellationTokenSource并取消操作.您需要一个共享(静态,线程安全)字典来充当查找.
如果您的主机是IIS,那么您的解决方案会变得更复杂……
内容总结
以上是互联网集市为您收集整理的c# – 从客户端通过WCF取消长时间运行的任务全部内容,希望文章能够帮你解决c# – 从客户端通过WCF取消长时间运行的任务所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。