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

时间:2014-04-14 13:57:09

标签: c# wcf .net-4.5

我有一个WCF服务,我有很长时间运行的方法,比如get和处理某种数据,然后将它返回给客户端。我试图使用类似于以下的合同

Task<string> ServiceMethod(string message);

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

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


其他信息

将相同数据返回到多个客户端仅在客户端请求相同数据的情况下,但由于获取和处理它需要时间,所以只要它可用,我想返回所有请求它的客户端。 / p>

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,您希望服务在完成长时间运行的生成数据的过程时回调客户端。由于您必须处理多个客户端,我建议您使用Duplex WCF。双工服务合同用于回调调用客户端的方法。以下代码项目链接是Duplex的一个很好的示例,并且有更多详细信息

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

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

答案 1 :(得分:0)

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