none
Windows WorkFlow Foundation入门(三) RRS feed

  • 常规讨论

  • WF支持的CodeDOM类型

          WF System.CodeDOM。你可使用这些类型来创建你的表达式,其中一些用于条件(conditions),一些用于规则(actions),还有一些能用于两者。

          注意:
    CodeDOM不支持一元操作符,也不支持不等操作符,如a!=b,你可以换成这样表达:(a==b)==false

       下表列出了WF所支持的CodeDOM类型。

     

    用于

    CodeAssignStatement

    Actions

    CodeBinaryOperatorExpression

    Conditions

    CodeDirectionExpression

    Conditions

    CodeExpressionStatement

    Actions

    CodeFieldReferenceExpression

    Conditions

    CodeMethodInvokeExpression

    Conditions

    CodeMethodReferenceExpression

    Conditions

    CodePrimitiveExpression

    Conditions

    CodePropertyReferenceExpression

    Conditions

    CodeThisReferenceExpression

    Conditions

    CodeTypeReference

    As part of expressions

    CodeTypeReferenceExpression

    Conditions

     

     

    CodeBinaryOperatorType

    Supported in

    Add

    Conditions, Actions

    BitwiseAnd

    Conditions, Actions

    BitwiseOr

    Conditions, Actions

    BooleanAnd

    Conditions, Actions

    BooleanOr

    Conditions, Actions

    Divide

    Conditions, Actions

    GreaterThan

    Conditions, Actions

    GreaterThanOrEqual

    Conditions, Actions

    IdentityEquality

    Conditions, Actions

    IdentityInequality

    Conditions, Actions

    LessThan

    Conditions, Actions

    LessThanOrEqual

    Conditions, Actions

    Modulus

    Conditions, Actions

    Multiply

    Conditions, Actions

    Subtract

    Conditions, Actions

    ValueEquality

    Conditions, Actions

     

    在工作流中使用事务

          WF提供的TransactionScopeActivity封装了.NET System.Transactions的事务功能,可以在操作发生错误时自动回滚,从而支持从事务失败中恢复。请参考MSDN中获取System.Transactions.Transaction和System.Transactions.TransactionScope类的更详细信息。 

     

     

    工作流中的批处理状态信息

          工作流会周期性在各个检查点保存它有状态,如果发生错误,工作流引擎有必要检索保存过的信息来返回到一个稳定的状态。如果两个以上的组件正在通信,那么组件间的coordinate persistence有助于保证组件的一致性。      

          这一点在发送或接收消息时尤其有用。例如,一个工作流可能发送多条消息,每个发送的操作都会请求消息服务。消息服务必须要维护工作流的一致性和持续的状态,只有工作流状态被成功保存,消息才能被发送。这意味着在单个的事务中,工作流状态以及消息发送状态都会被保存起来,以保存所有组件间状态的一致性。

     

     

             WF提供了System.Workflow.Runtime.IWorkBatch 和 System.Workflow.Runtime.IpendingWork两个接口来解决这个问题。

     

         在对服务所有调用中,运行时引擎在自己的线程上下文中提供了System.Workflow.Runtime.IworkBatch,你可以添加一个挂起的工作项到批处理中,这样运行时引擎可以一次性将所有相关的工作项提交到事务处理。

     

          在ExternalDataEventArgs的构造函数中,可以传递一个IpendingWork类型的参数。

     

     

     当组件被请求时的执行顺序

          1、在第一次请求前,工作流创建工作批处理对象。
          2、工作流将工作批处理传对象递到到组件的请求方法中。
          3、组件创建一个工作项,并将其添加到工作批处理对象中。

       其它组件请求时,重复第二步和第三步。

    在事务提交点的执行顺序

          1、工作流创建一个事务
          2、工作流遍历工作批处理对象中的工作项,并收集其中属于某一组件的工作项,维护其顺序,然后创建一个新工作批处理对象。工作流调用组件的
    Commit方法,并把事务对象和这个批处理对象传递给它。
          3、组件把工作批处理对象中的工作添加到事务中。

     

     

          对所有的组件重复第二步和第二步。

     

       当组件的Commnit方法成功调有后,工作注提交相应的事务。

       当事务成功提交后,工作流遍历工作批处理中工作项,如第二步一样。工作流调用每个组件的Complete方法,交把事务对象和批处理对象传递给它。


     

    工作流发生错误时的执行顺序

     

     

        1、工作流识别错误范围内的所有工作项并构造一个工作批处理对象,并将这些工作项添加这个工作批处理对象中。对于2、工作批处理中所有工作,工作流通过IPendingWork接口来调用其Complete方法,并传递完成状态为false

        3、工作流取消工作批处理中的所有工作。

       从错误中恢复后,运行时维护剩余的工作批处理项引用。

    转自:http://www.cnblogs.com/watsonyin/

     

    工作流发生错误时的执行顺序

     

     

        1、工作流识别错误范围内的所有工作项并构造一个工作批处理对象,并将这些工作项添加这个工作批处理对象中。对于2、工作批处理中所有工作,工作流通过IPendingWork接口来调用其Complete方法,并传递完成状态为false

        3、工作流取消工作批处理中的所有工作。

       从错误中恢复后,运行时维护剩余的工作批处理项引用。

    转自:http://www.cnblogs.com/watsonyin/

     

     

     

     

     

     

    2009年6月18日 7:57