【问题标题】:Workflow with id "xxxxx" not found in state persistence store在状态持久性存储中找不到 ID 为“xxxxx”的工作流
【发布时间】:2009-07-24 12:36:10
【问题描述】:

我有一个工作流应用程序,当我尝试使用 ExternalDataExchangeService 调用事件时抛出错误。

在状态持久性存储中找不到 ID 为“866568ab-ca1b-4404-a2f1-2c8704539ef4”的工作流。

无法传递接口类型“RecipeChangeService.IRecipeChangeService”上的事件“QAEngOrTLReject”,例如 ID“866568ab-ca1b-4404-a2f1-2c8704539ef4”。

这是我的实现代码 - 请帮助我卡住:(

下面是接口和数据交换事件args-

 
public class RecipeChangeService : IRecipeChangeService{
        #region IRecipeChangeService Members

        public event EventHandler QAEngOrTLApprove;

        public event EventHandler QAEngOrTLReject;

public bool QAEngOrTLApproved(Guid instanceId, ResponseDataObject rdo) {
            if (QAEngOrTLApprove != null) {
                QAEngOrTLApprove(this, new XMESWFRecipeResponseDataEventArgs(rdo, instanceId));
                return true;
            }return false;

        }

      public  bool QAEngOrTLRejected(Guid instanceId, ResponseDataObject rdo) {
            if (QAEngOrTLReject != null) {
                QAEngOrTLReject(this, new XMESWFRecipeResponseDataEventArgs(rdo,instanceId));
                return true;
            } return false;
        }
}

[Serializable]
    public class XMESWFRecipeResponseDataEventArgs : ExternalDataEventArgs {
        public readonly ResponseDataObject rdo = null;
        public XMESWFRecipeResponseDataEventArgs(ResponseDataObject rdo, Guid instanceId)
            : base(instanceId) 
        {
            this.rdo = rdo;
        }
    }

使用 -

引发事件


 IRecipeChangeService s =
                   ExceptionServices.GetExceptionService(WorkflowExceptionType.RecipeChange)
                   as IRecipeChangeService;
  s.QAEngOrTLApproved(new Guid(instanceId), rdo);

谢谢。

【问题讨论】:

    标签: workflow workflow-foundation


    【解决方案1】:

    帮我们一个忙,请确保代码可读。

    找不到工作流的原因有很多。首先,如果没有持久性服务并且工作流不在内存中,您也会看到此错误。要检查的另一件事是工作流程是否尚未完成。这可能是其他事件的结果,也可能是未处理的错误。

    【讨论】:

    • 我以声明方式添加了持久化服务。我应该如何确定它是否正常工作。我确定工作流在内存中并且没有完成。
    • 打开您保存工作流的数据库并检查 InstanceState 表。每个已知的工作流程都应该有记录。您可以使用 GetLoadedWorkflows() 函数检查您的工作流是否在内存中。如果不存在,您可能使用了错误的工作流 InstanceId,或者可能有多个工作流运行时并且使用了与您开始工作流的位置不同的运行时。
    • 我的 InstanceState 表是空的。这意味着不会保留任何工作流。如何确定实例何时被持久化服务保存到数据库。
    • 如果您在 SqlWorkflowPersistenceService 上将 UnloadOnIdle 选项设置为 true,它将在任何工作流空闲时保持它。因此,使用 DelayActivity 会使其空闲并持续存在。或者使用 WorkflowInstance.Unload() 函数手动卸载它。
    • 有一点我忘了提的是,工作流运行时只会去SqlWorkflowPersistenceService 是指定的工作流不在内存中。因此,从您最初的问题来看,您可能从错误的角度看待这个问题。您从哪里获得工作流 instanceId,如果它是有效的工作流实例,那么它发生了什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    相关资源
    最近更新 更多