获取有关在WCF中花费很长时间的方法的进度信息的有效模式?

我想获得有关在WCF上调用的方法的进度更新。

例如,我运行1000个查询,并想知道当前状态。

如果双工合同在您的环境中无法使用,则必须使用轮询。 您的初始方法可以返回标识符(可能是GUID),然后您可以后续调用另一个方法来检查进度,并传入标识符。

这显然需要您将进度信息存储在某个地方(如会话或数据库),这不是很好。

是 – 使用双工合同并使用回调每隔一段时间报告进度。

这在很大程度上取决于您所使用的服务以及您希望操作所需的时间。

如果您在单个服务上启动1000个查询,则在收到对服务的所有调用之前,您可能会遇到服务限制。

客户端也有类似的现象。 WCF一次只允许这么多并发调用。 这在某种程度上是可配置的,但如果1000个并发调用在没有一两次启动的情况下工作,我会感到惊讶。

如果调用最终或多或少同步,我会将所有查询放入队列并依次处理每个调用。 然后,您可以从UI监视队列,以在完成对服务的调用时更新进度。

如果您的架构支持1000个并发调用,那么双工绑定将非常适合。 你可以轮询完成。

或者,您可以创建目标服务在查询完成时更新的发布/订阅服务。 当查询结果可用时,您的客户端将只从pub / sub服务捕获事件。