策略执行如何使用FactRetriever工作?

时间:2014-04-29 04:37:11

标签: c# biztalk

我使用以下链接检查FactRetriever课程的文档:

http://msdn.microsoft.com/en-us/library/ee253709%28v=bts.10%29.aspx

它说:

  

事实检索器是用于断言实例的组件   在执行期间将长期事实纳入政策。你可以实现   IFactRetriever接口并配置要使用的策略版本   这个实现在运行时带来了长期的事实   实例。策略版本调用的UpdateFacts方法   如果是事实,事实检索器实现在每个执行周期   为该特定版本配置了检索器。

我尝试独立使用Business Rule Composer(不使用业务流程)。

问题1: 执行周期何时发生?它是如何被触发的?

  • 是基于时间间隔吗?如果是这样,它是可配置的吗?
  • 如果事实发生变化,是否存在某种策略执行的机制?如果是那么问题2的答案是什么。

问题2: 执行周期的确切做法是什么?算法是什么?

  • 可能的算法1。首先执行Policy,然后在执行期间,它将调用UpdateFacts,以便将新鲜对象带入内存以应用策略。
  • 可能的算法2. 首先UpdateFacts以某种方式执行,然后,如果某些相关事实被更改并且有一些与这些事实相关的策略,它们将触发执行变化的事实。

1 个答案:

答案 0 :(得分:1)

A1:你可以从字面上理解。每次执行策略时,如果在任何其他实际规则处理之前调用IFactRetriever,则实现的UpdateFacts方法。没有计时器,没有其他任何配置。每一次都意味着每一次。

在政策执行之外更新长期事实是没有办法也没有理由的。当然,事实可能会改变,但如果政策没有执行,那么更新就是一种浪费。作为IFactRetriever的实施者,您的工作是跟踪事实的变化并通过UpdateFacts提供最新的事实。引擎或策略无法“知道”何时更新事实。从技术上讲,该政策并不关心事实已发生变化。它将始终根据其所具有的事实来评估规则。

A2:执行周期只是一个调用者对Policy的单次调用,例如Policy.Execute()。您可以在此处查看示例:http://msdn.microsoft.com/en-us/library/aa995566.aspx

算法尽可能简单。出于我们的目的,假设UpdateFacts是规则引擎在您调用Execute后执行的第一件事,如果事实检索器当然是配置的话。这种情况每次都会发生除了在执行后立即执行以外的任何其他点,永远不会调用更新事实。这是执行。

但是,值得指出的是,引擎可以在内存中创建多个策略实例,以便它可以在同一个进程中为多个呼叫者提供服务(从技术上讲,它可能是AppDomain,从不打扰检查)。因此,对于策略的任何给定实例,每个Execute都会调用UpdateFact。