public SendRequestReceiveResponseScope() { tryCatch = new TryCatch { //Try = Body, // it is already set above Catches = { new Catch<Exception> { Action = new ActivityAction<Exception> { Handler = new Sequence { Activities = { new ConditionalOperationTaskWaiter(), new Rethrow(), }, }, }, }, }, // The Finally works differently here than in C#, it is called only when the Try/Catch blocks complete. // In case of exception, those activities above will always Fault (the Body or additionally the operation task will throw). // This Finally is called only in case of Close or Cancel, in case of Cancel, we should also check the operation task's observed state. // A special case, when this scope is in an external TryCatch and that Catch handles the propagated exception, // in this case both Fault and Cancel happens, and we double-check the the operation task's observed state. Finally = new ConditionalOperationTaskWaiter(), }; noPersistHandle = new Variable<NoPersistHandle>(); Constraints.Add(OperationActivityHelper.VerifyParentIsWorkflowActivity()); Constraints.Add(SendRequestReceiveResponseScopeHelper.VerifySendRequestReceiveResponseScopeChildren()); Constraints.Add(SendRequestReceiveResponseScopeHelper.SetSendRequestReceiveResponseScopeExecutionPropertyFactory()); }