我们一直遇到一个问题,当当前工作流程太多时,该问题导致WF(Windows Workflow Foundation)阻止新工作流程的创建。我们的设置包含3个服务
如果我们将WorkflowProcessor和WorkflowService限制为只能同时处理100个工作流(设置WCF节流配置ServiceThrottlingBehavior.MaxConcurrentInstances = 100
),则在达到限制时将阻止EventService。即如果WorkflowProcessor当前正在处理100个工作流,则WorkflowService在某些工作流完成处理之前将不会响应EventService。
从我们收集的数据来看,WF似乎并不是要处理“实时”工作流的节流,即,在我看来,这似乎是为批量创建而构建的,而不是持续接收新的工作流。我看了类似this之类的帖子,该帖子似乎希望分批启动工作流程,但对我们而言不起作用。因此,我们的想法是在每个活动之间插入一些手动限制,方法是检查当前正在运行的实例数是否已达到限制,然后在一定时间内卸载工作流。
因此,问题是:(如何)可以获得当前正在运行的工作流数量(无论多少都计入ServiceThrottlingBehavior.MaxConcurrentInstances
中)?最好在CodeActivity之类的活动中使用。
或者,如果你们中的一些人知道如何以适当的方式在我们的上下文中处理节流(也许WF实际上支持这一点),我也很乐意对此有所投入。