1

對於一個簡單的原型,我必須顯示一個工作流文件,並顯示我們實際上在哪一步。WorkflowInspectionServices在Workflow Foundation中拋出XamlObjectWriterException

我發現了一個樣本這裏: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"} 
          } 
        }; 

與唯一的問題是,我只看到在工作流設計「序列」元素。

所以我創建了exactily描述同一件事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」類,它只用在下面幾行。

我有點desesperate,我想了解如何工作流程的基礎,但它是一個有點硬,現在:(

任何意見將受到歡迎

編輯: 我想這讀取文件,我沒有在我的構造函數中的任何異常,但我不知道爲什麼,有些庫我使用(ActiPro)似乎不負載後工作了:

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

     return ActivityXamlServices.Load(reader); 

回答

2

我找到了解決方案!

YEAAAAAAAAAAAAAH:P

其實問題是,我的工作流程是在同一個項目比我的自定義活動。然後Visual Studio沒有說明設計者在哪個程序集中可以找到這個活動,但是當你閱讀這個文件時,這是一個獨立的讀者,它不知道你當前的程序集。

因此,有兩個不同的項目,一個包含工作流程,一個包含活動,然後我的工作流程指定我可以在其中找到圖表的程序集。像這樣,我可以輕鬆地做一個WorkflowDesigner.Load(「myWorkflowHere.xaml」);沒有任何問題!

0

「Workflows/WorkflowSample.xaml」可能是針對您的代碼的先前版本。

刪除它,重建你的解決方案,然後重新創建它。

+0

不,我創建了一個類似於創建應該加載示例的代碼部分30分鐘後的東西: – J4N 2011-04-12 19:24:42

+0

@ J4N:你刪除它,重建並重新創建它嗎?假設總是造成這種錯誤的原因。 – Will 2011-04-12 19:30:32

+0

是的,我剛剛做了它,它不會改變任何東西 – J4N 2011-04-13 05:38:33

相關問題