WorkflowInspectionServices在Workflow Foundation中向我抛出一个XamlObjectWriterException

时间:2011-04-12 14:28:48

标签: c# .net workflow-foundation workflow-foundation-4 workflow-activity

对于一个简单的原型,我将显示一个工作流文件,并显示我们实际上是哪一步。

我在这里找到了一个示例:http://msdn.microsoft.com/en-us/library/ee624139.aspx

几乎我需要的是什么。

在此示例中,所有操作都不会等待其他操作。所以我创造了一些非常虚拟的活动:

    public class WaitForNextCall :NativeActivity
{
    public const String WaitBookmark = "WaitingStep";


    #region Overrides of NativeActivity

    /// <summary>
    /// When implemented in a derived class, runs the activity’s execution logic.
    /// </summary>
    /// <param name="context">The execution context in which the activity executes.</param>
    protected override void Execute(NativeActivityContext context)
    {
        context.CreateBookmark(WaitBookmark);
    }

    protected override bool CanInduceIdle
    {
        get
        {
            return true;
        }
    }
    #endregion
}

这似乎有效。从那以后,我直接在代码中创建我的工作流程:

            return new Sequence()
                   {
                       Activities =
                           {
                               new WaitForNextCall(){DisplayName = "Step one"},
                               new WaitForNextCall(){DisplayName = "Step Two"},
                               new WaitForNextCall(){DisplayName = "Step Three"},
                               new WaitForNextCall(){DisplayName = "Step Four"}
                           }
                   };

唯一的问题是我只在工作流设计器中看到“Sequence”元素。

所以我创建了一个xaml文件,它描述的是同样的东西,我加载它是这样的:

return ActivityXamlServices.Load("Workflows/WorkflowSample.xaml") as DynamicActivity;

但后来我得到了这个例外:

    System.Xaml.XamlObjectWriterException occurred
  Message=Impossible de créer le type inconnu '{clr-MyTestNameSpace.UserInterface.WorkflowItems}WaitForNextCall'.
  Source=System.Xaml
  LineNumber=0
  LinePosition=0
  StackTrace:
       à System.Xaml.XamlObjectWriter.WriteStartObject(XamlType xamlType)
       à System.Xaml.XamlWriter.WriteNode(XamlReader reader)
       [...] 

我仔细检查过,文件存在(看来,如果没有正确指定文件,则会出现另一条错误消息)。但它找不到我的“WaitFornextCall”类,它只用了几行。

我有点贬低,我正在努力了解Workflow基础是如何工作的,但现在有点困难:(

欢迎任何建议

编辑: 我试过这个来读取文件,我的构造函数中没有任何异常,但我不知道为什么,我正在使用的一些库(ActiPro)在加载后似乎不再起作用了:

        XamlReader reader = new XamlXmlReader("Workflows/WorkflowSample.xaml", new XamlXmlReaderSettings(){LocalAssembly =  System.Reflection.Assembly.GetExecutingAssembly()});

        return ActivityXamlServices.Load(reader);

2 个答案:

答案 0 :(得分:2)

我找到了解决方案!!!!

YEAAAAAAAAAAAAAAH:P

实际上问题是我的Workflow与我的自定义活动在同一个项目中。然后,visual studio不会指出设计人员可以在哪个程序集中找到此活动,但是当您阅读该文件时,这是一个独立的读者,它不知道您当前的程序集。

因此,有两个不同的项目,一个包含工作流程,一个包含活动,然后我的工作流程指定我可以在其中找到图表的程序集。像这样我可以轻松地做一个WorkflowDesigner.Load(“myWorkflowHere.xaml”);没有任何问题!

答案 1 :(得分:0)

“Workflows / WorkflowSample.xaml”可能是针对您代码的先前版本构建的。

删除它,重建您的解决方案,然后重新创建它。