【问题标题】:How the Policy Execution works using FactRetriever?策略执行如何使用 FactRetriever 工作?
【发布时间】:2014-04-29 04:37:10
【问题描述】:

我正在使用以下链接检查 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以某种方式执行,然后,如果某些相关事实发生变化并且存在与这些事实相关的一些策略,它们将触发对变化的事实执行。

【问题讨论】:

    标签: c# biztalk


    【解决方案1】:

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

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

    A2:执行周期就是任何调用者对策略的一次调用,例如通过 Policy.Execute()。你可以在这里看到一个例子:http://msdn.microsoft.com/en-us/library/aa995566.aspx

    算法尽可能简单。出于我们的目的,假设 UpdateFacts 是您调用 Execute 后规则引擎执行的第一件事,当然前提是配置了 Fact Retriever。每次都会发生这种情况。除了在 Execute 之后立即调用 Update Facts。这是每次执行。

    然而,同样值得指出的是,引擎可以在内存中创建策略的多个实例,以便它可以在同一个进程中为多个调用者提供服务(从技术上讲,它可能是 AppDomain,从不费心去检查)。因此,在任何给定的策略实例上,每次执行都会调用 UpdateFacts。

    【讨论】:

    • 他们应该坚持你是文档的答案!你没有博客吗?或类似的东西!?顺便说一句,Every Time 对我来说仍然模棱两可。我在编程中知道两种类型的every timeEvent BasedInterval Based(Polling).
    • :) 每次 == 每次通话。
    猜你喜欢
    • 1970-01-01
    • 2017-07-16
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 2019-12-07
    • 2017-07-22
    相关资源
    最近更新 更多