Workflow 如何决定做什么和不做什么';无法在工作流中持久化

Workflow 如何决定做什么和不做什么';无法在工作流中持久化,workflow,workflow-foundation,workflow-foundation-4,Workflow,Workflow Foundation,Workflow Foundation 4,我有一个关于持久化工作流中值状态的持久化的问题。我的一个扩展类中有两个属性: public int ApprovalCount { get; set; } public bool ApprovedByAllInitialApprovers { get; set; } 这些属性是在使用另一种方法进行某些计算时设置的 我的问题是,当工作流处于空闲状态并持续存在时,这些值的状态也会持续存

我有一个关于持久化工作流中值状态的持久化的问题。我的一个扩展类中有两个属性:

    public int ApprovalCount
    {
        get;
        set;
    }

    public bool ApprovedByAllInitialApprovers
    {
        get;
        set;
    }
这些属性是在使用另一种方法进行某些计算时设置的

我的问题是,当工作流处于空闲状态并持续存在时,这些值的状态也会持续存在于数据库中,因此,如果我再次调用扩展类上的方法,我会在离开时拾取这些值;我理解这种行为显然是工作流以持久化方式运行的基本方式,在90%的情况下,我确实希望重新存储和持久化值,但这方面的例外情况又如何呢?是否有任何方法可以“标记”属性(可能带有属性)以表明我不希望它持久化?或者我必须在每次计算之前重置这些值吗


非常感谢您的帮助。提前谢谢。

这个问题有两个答案

  • 首先,当一个工作流被序列化时,它是使用二进制序列化程序来完成的。因此,您可以使用NonSerialized属性标记任何不希望序列化的字段
  • 也就是说,工作流扩展在工作流持久化期间不会序列化,所以您必须做一些有趣的事情来让它们序列化。或者,您可能正在使用单例扩展,即使工作流被持久化并重新加载,它和它的值仍然存在

  • 谢谢你,莫里斯。是的,我不知道为什么我的属性会持续存在,这真的很奇怪。我得到的设置是:代码活动指向扩展接口扩展接口指向扩展实现内部的扩展实现是我的两个属性。但是,这些都没有在界面中定义,所以可能与此有关?如果您坚持工作流,停止主机应用程序,重新启动并重新加载工作流,会发生什么?这些值是否仍然存在?如果是,您是否将扩展存储在工作流变量或参数中?