从wcf服务异步返回到多个客户端

本文关键字:客户端 返回 wcf 服务 异步 | 更新日期: 2023-09-27 17:58:18

我有一个WCF服务,其中有一些长期运行的方法,比如获取和处理某种数据,然后将其返回到客户端。我尝试过使用类似于以下的合同

Task<string> ServiceMethod(string message);

问题是,如果我想从服务向多个客户端返回相同的数据,那么我该怎么做(我该如何获取和存储请求数据的客户端的信息)。

此外,如果我需要从上面的方法调用后台工作者,那么我如何在runworker_completed中进行处理并将结果返回到上面。


附加信息

向多个客户端返回相同的数据只是在客户端请求相同数据的情况下,但由于获取和处理数据需要时间,因此每当数据可用时,我都希望返回给所有请求过数据的客户端。

从wcf服务异步返回到多个客户端

如果我正确理解您的问题,您希望服务在完成生成数据的长时间运行过程时回调客户端。由于您必须处理多个客户端,我建议您使用Duplex WCF。双工服务约定提供在调用客户端时回调方法。下面的代码项目链接是双工的好例子,有更多的细节

http://www.codeproject.com/Articles/491844/A-Beginners-Guide-to-Duplex-WCF

请注意,您应该有自己的逻辑来维护回调通道列表

我已经在服务中存储了Task的缓存以及请求的密钥。每当该密钥的任务完成时,我都会将任务发送回所有请求相同密钥的客户端。此外,对于已经存在的基于事件完成的函数,我使用了TaskCompletionSource并将其存储在缓存中,然后再次使用它发送异步响应。