我有一个WCF服务,我有很长时间运行的方法,比如get和处理某种数据,然后将它返回给客户端。我试图使用类似于以下的合同
Task<string> ServiceMethod(string message);
问题是,如果我想将相同的数据从服务返回到多个客户端,那么我该怎么做(如何获取和存储有关请求数据的客户端的信息)。
此外,如果我需要从上面的方法调用后台工作程序,那么如何在runworker_completed中处理并将结果返回到上面。
其他信息
将相同数据返回到多个客户端仅在客户端请求相同数据的情况下,但由于获取和处理它需要时间,所以只要它可用,我想返回所有请求它的客户端。 / p>
答案 0 :(得分:1)
如果我正确理解了您的问题,您希望服务在完成长时间运行的生成数据的过程时回调客户端。由于您必须处理多个客户端,我建议您使用Duplex WCF。双工服务合同用于回调调用客户端的方法。以下代码项目链接是Duplex的一个很好的示例,并且有更多详细信息
http://www.codeproject.com/Articles/491844/A-Beginners-Guide-to-Duplex-WCF
请注意,您应该拥有自己的逻辑来维护回调通道列表
答案 1 :(得分:0)
我已使用请求的密钥在服务中存储了Task的缓存。每当完成该密钥的任务时,我将任务发送回请求相同密钥的所有客户端。 对于基于事件的完成的现有函数,我使用了TaskCompletionSource并将其存储在缓存中,并再次使用它来发送异步响应。