WorkflowMarkupSerializer不会在状态机工作流程中保留位置

时间:2009-04-09 00:50:50

标签: c# .net workflow

我正在使用WorkflowMarkupSerializer来保存状态机工作流程 - 它保存状态OK,但不保留其位置。编写工作流程的代码在这里:

        using (XmlWriter xmlWriter = XmlWriter.Create(fileName))
        {
            WorkflowMarkupSerializer markupSerializer
                = new WorkflowMarkupSerializer();
            markupSerializer.Serialize(xmlWriter, workflow);
        }

阅读工作流程的代码是:

            DesignerSerializationManager dsm
            = new DesignerSerializationManager();
        using (dsm.CreateSession())
        {
            using (XmlReader xmlReader
                = XmlReader.Create(fileName))
            {
                //deserialize the workflow from the XmlReader
                WorkflowMarkupSerializer markupSerializer
                    = new WorkflowMarkupSerializer();
                workflow = markupSerializer.Deserialize(
                    dsm, xmlReader) as Activity;

                if (dsm.Errors.Count > 0)
                {
                    WorkflowMarkupSerializationException error
                        = dsm.Errors[0]
                          as WorkflowMarkupSerializationException;
                    throw error;
                }
            }
         }

5 个答案:

答案 0 :(得分:1)

打开控制面板 - > “区域和语言选项”并将列表分隔符设置为“,”(逗号) 和workflow serializer将使用','(逗号)作为struct SizeF的X,Y坐标的分隔符

然后选择';'和工作流程序列化程序将使用';' (分号)作为分隔符。

这非常愚蠢,序列化程序使用区域设置进行序列化标记。

答案 1 :(得分:0)

哈,即使是Visual Studio 2008中托管的工作流设计人员也会随机丢失状态。这告诉我这可能不是一件容易的事,而且是构成它的活动外部的信息。我会在主持人周围挖掘更多信息;如果我找到了什么,我会回复。

答案 2 :(得分:0)

所有州的位置都保存在一个单独的文件中。您需要使用工作流本身的标记来拖动它。幸运的是,它也只是XML,因此您可以重用大部分代码。如果内存服务,我相信它只是NameOfYourWorkflow.layout。

我同意x0n - 设计师在Visual Studio中非常糟糕。

答案 3 :(得分:0)

好的,this tutorial提供了有关如何操作的良好信息 - 尽管到目前为止我只能保存布局,但我无法正确使用布局。有问题的信息大约是2 / 3rds(或者只是搜索.layout)

(如何关闭他自己的问题?)

答案 4 :(得分:0)

请注意,创建的XML的序列化或反序列化存在错误(在示例中以.layout扩展名命名。)

它生成以下xml作为文件的第一行:

<?xml version="1.0" encoding="utf-8"?><StateMachineWorkflowDesigner xmlns:ns0="clr-namespace:System.Drawing;Assembly=System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" Name="New" Location="30, 30" Size="519, 587" AutoSizeMargin="16, 24" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow">

重新阅读时, size 属性会导致异常。我从文件中删除了Size =“519,587”,工作流程正确加载回来。现在,我写文件,打开它并删除大小,然后关闭它。我需要考虑更优雅的解决方案,但至少我现在正在保存和恢复状态机工作流程。