private void Initiate(IActivityFactory activityFactory, IBaseMessage message, string processName) { var previousTrackingContext = message.GetTrackingContext(); // an outbound message without an ongoing process --i.e. that has no process affiliation-- denotes a // publish/subscribe, or messaging-only process and the whole process needs to be tracked; that means the // initiating messaging step, whose MessagingStepActivityId is still conveyed by the ambient // previousTrackingContext, as well as the currently ongoing messaging step, which completes the process. var isMessagingProcess = message.Direction().IsOutbound() && !previousTrackingContext.HasProcessAffiliation() && !previousTrackingContext.MessagingStepActivityId.IsNullOrEmpty(); if (_logger.IsDebugEnabled) { _logger.Debug($"Initiating tracking of a messaging {(isMessagingProcess ? "process" : "step")}."); } _process = isMessagingProcess ? activityFactory.CreateProcess(message, processName) : previousTrackingContext.HasProcessAffiliation() ? activityFactory.FindProcess(previousTrackingContext) : null; _previousMessagingStep = isMessagingProcess ? activityFactory.FindMessagingStep(previousTrackingContext) : null; _messagingStep = activityFactory.CreateMessagingStep(message); }