导航

Request/Response Port与XLANGs Succeed function

Posted on 2007-04-22 11:44  鸡尾虾的壳  阅读(251)  评论(0编辑  收藏  举报
Request/Response类型的颇Port可以添加若干个fault操作。fault与response操作用于接收消息。fault操作仅仅用于当response接收消息失败时,接收一个默认的消息标识response的失败。所有fault操作与response操作接收的消息类型不能相同,因为它们在同一个逻辑的port中。

实现fault的一个常见的flow是:在Scope中Send消息给Response操作,在Scope的异常处理Block中,发送消息给fault操作。可是这种flow导致的结果是编译产生如下的错误信息:
             error X2162: must receive before sending a fault message on an implemented port
从fault操作的语义上分析,它接收消息的前提是Orchestration中Send给Response操作的Send Shape必须执行,并且Send失败。但是在Orchestration Flow中,Send fault操作所在的异常捕获可能是由于Scope中Send Response之前的部分导致的。也就是说Send fault存在违背fault操作语义的可能。因此,编译就产生了X2162类型的错误。类似与,编程语言中,必须保证所有可能的路径都有返回值。

正确的Orchestration Flow应该是:把Send Response放在一个嵌套Scope中,在父Scope的Exception Handle中,用!Succeed(name of nested Scope)来决定需要Send fault。