Workflow foundation 4 OutArgument中的InvalidCastException<;T>;。集合()

Workflow foundation 4 OutArgument中的InvalidCastException<;T>;。集合(),workflow-foundation-4,Workflow Foundation 4,奇怪的例外,这是工作正常之前 System.InvalidCastException: Cannot convert object 'Waiting' to type 'System.Activities.Statements.Pick+PickState'. at System.Runtime.TypeHelper.Convert[T](Object source) at System.Activities.Location`1.set_ValueCore(Object value

奇怪的例外,这是工作正常之前

System.InvalidCastException: Cannot convert object 'Waiting' to type 'System.Activities.Statements.Pick+PickState'.
   at System.Runtime.TypeHelper.Convert[T](Object source)
   at System.Activities.Location`1.set_ValueCore(Object value)
   at System.Activities.ActivityContext.SetValueCore[T](LocationReference locationReference, T value)
   at System.Activities.ActivityContext.SetValue[T](OutArgument`1 argument, T value)
   at System.Activities.OutArgument`1.Set(ActivityContext context, T value)
   at MyApplication.WaitForStatusChange.OnBookmarkResumed(NativeActivityContext context, Bookmark bookmark, Object value)
   at System.Activities.Runtime.BookmarkCallbackWrapper.Invoke(NativeActivityContext context, Bookmark bookmark, Object value)
   at System.Activities.Runtime.BookmarkWorkItem.Execute(ActivityExecutor executor, BookmarkManager bookmarkManager)
MyApplication.WaitForStatusChange是一个自定义的本机活动,当工作流在此活动的书签上恢复时会发生错误,其中带有bookmar参数的枚举

WaitForStatusChange活动放在Pick活动中(另一个分支上有另一个NativeActivity)

活动代码

  public class WaitForPartnerIntegrationStatusChange : NativeActivity
  {
    public OutArgument<PartnerSoftwareIntegrationStatus> Status { get; set; }

    protected override void Execute(NativeActivityContext context)
    {
      context.CreateBookmark(DocumentStatusChangeWatcher.DocumentPartnerSoftwareIntegrationStatusChangedBookmark, OnBookmarkResumed);
    }


    private void OnBookmarkResumed(NativeActivityContext context, Bookmark bookmark, object value)
    {
      if (value is PartnerSoftwareIntegrationStatus)
      {
        Status.Set(context, (PartnerSoftwareIntegrationStatus)value);
      }
    }

    protected override bool CanInduceIdle
    {
      get { return true; }
    }
  }
公共类WaitForPartnerIntegration状态更改:NativeActivity
{
公共输出参数状态{get;set;}
受保护的覆盖无效执行(NativeActivityContext上下文)
{
context.CreateBookmark(DocumentStatusChangeWatcher.DocumentPartnerSoftwareIntegrationStatusChangedBookmark,OnBookmark);
}
private void OnBookmark已恢复(NativeActivityContext上下文、书签书签、对象值)
{
if(值为PartnerSoftwareIntegrationStatus)
{
Status.Set(上下文,(PartnerSoftwareIntegrationStatus)值);
}
}
受保护的覆盖布尔Caninducidel
{
获取{return true;}
}
}

当您更改工作流定义并尝试恢复持久化工作流时,经常会看到这些奇怪的异常


基本上,您无法对正在运行的工作流进行任何更改。

这很奇怪。您的代码看起来很好,奇怪的是,在显式检查值是否为PartnerSoftwareIntegrationStatus之后,您得到了InvalidCastException。这在之前工作正常-在什么之前?如何恢复书签?我想我找到了解释:此活动的早期版本没有包含OutArgument。恢复使用旧版本启动并使用新版本恢复的工作流时出现问题。Jota:它在版本升级之前工作,这会添加OutArgument。。。我以标准方式恢复书签,以枚举值作为参数。好吧,我想你已经发现了问题所在。希望通过WWF 4.5,我们能够通过工作流版本控制解决其中一些问题。