none
谁能给讲解一下补偿 作用域 异常 怎么用 请大师们指教,谢谢 RRS feed

答案

  • 这几个形状一般用在两种场景:
    1. 用于异常处理,这时只需要作用域和异常形状,相当于C#中的try 和 catch
      在作用域里产生了异常,会被拿来跟异常形状设定的需要捕获的异常比较,如果匹配则交由异常形状里的代码执行异常处理的操作,如果没有匹配到相应的异常类型,则这个异常被继续往上一级抛,就被biztalk 运行时捕获变成一个未被捕获的异常。
    2. 用于长事务的补偿
      biztalk的orchestration的一个实例可以很快的运行完,也可以运行一个小时,也可以运行一天,一个星期的,根据业务的实际情况不同而不同,比如流程中需要把消息发送到某一个业务伙伴那里处理,partner那可能处理了3天才把处理好的消息返回来。在这么长的运行时间里如果还需要保证事务的完整性,就不可能像sql server中那么简单的处理为原子事务,就是等所有操作都确定执行没问题后一并提交。如果提交失败简单一条语句就回滚。biztalk中的长事务被分割为一个个的单独的原子事务,每个原子事务分别自己提交,一旦某个事务出错后前面已经运行并提交了的原子事务需要逐个补偿。补偿就是用来补偿已经运行并被提交了的原子事务,在补偿形状中做原子事务的反操作。
    关于biztlak的补偿机制,可以参考文章:biztalk 2006 事务补偿模型[翻译]
    2008年11月20日 9:25

全部回复

  • 这几个形状一般用在两种场景:
    1. 用于异常处理,这时只需要作用域和异常形状,相当于C#中的try 和 catch
      在作用域里产生了异常,会被拿来跟异常形状设定的需要捕获的异常比较,如果匹配则交由异常形状里的代码执行异常处理的操作,如果没有匹配到相应的异常类型,则这个异常被继续往上一级抛,就被biztalk 运行时捕获变成一个未被捕获的异常。
    2. 用于长事务的补偿
      biztalk的orchestration的一个实例可以很快的运行完,也可以运行一个小时,也可以运行一天,一个星期的,根据业务的实际情况不同而不同,比如流程中需要把消息发送到某一个业务伙伴那里处理,partner那可能处理了3天才把处理好的消息返回来。在这么长的运行时间里如果还需要保证事务的完整性,就不可能像sql server中那么简单的处理为原子事务,就是等所有操作都确定执行没问题后一并提交。如果提交失败简单一条语句就回滚。biztalk中的长事务被分割为一个个的单独的原子事务,每个原子事务分别自己提交,一旦某个事务出错后前面已经运行并提交了的原子事务需要逐个补偿。补偿就是用来补偿已经运行并被提交了的原子事务,在补偿形状中做原子事务的反操作。
    关于biztlak的补偿机制,可以参考文章:biztalk 2006 事务补偿模型[翻译]
    2008年11月20日 9:25
  • 哦,大概明白一些。我先去试验一下。有问题再来问。谢谢

    2008年11月20日 9:31