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

C# 从wcf服务异步返回到多个客户端,c#,wcf,.net-4.5,C#,Wcf,.net 4.5,我有一个WCF服务,其中有一些长期运行的方法,比如获取并处理某种数据,然后将其返回给客户端。我曾尝试使用类似以下的合同 Task<string> ServiceMethod(string message); 任务服务方法(字符串消息); 问题是,如果我想从服务中向多个客户端返回相同的数据,那么我该如何做(如何获取和存储有关请求数据的客户端的信息) 另外,如果我需要从上面的方法调用后台工作程序,那么我如何处理runworker_completed并将结果返回到上面的方法 附加信息

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

Task<string> ServiceMethod(string message);
任务服务方法(字符串消息);
问题是,如果我想从服务中向多个客户端返回相同的数据,那么我该如何做(如何获取和存储有关请求数据的客户端的信息)

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


附加信息


只有当客户请求相同的数据时,才能将相同的数据返回给多个客户,但由于获取和处理数据需要时间,因此每当数据可用时,我希望返回给所有请求数据的客户。

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


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

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

除非您有理由不这样做,否则我会说对任务使用
signal
:如果我在我的wcf服务中通过http使用soap端点,那么我可以使用上面的吗?是的。。。在这个例子中使用源代码,你应该是好的