コード例 #1
0
        public TrackingCommand(TrackingRecord record)
            : this()
        {
            ActivityScheduledRecord activityScheduledRecord = record as ActivityScheduledRecord;

            if (activityScheduledRecord != null)
            {
                CreateTrackingCommand(activityScheduledRecord);
                return;
            }

            CancelRequestedRecord cancelRequestedRecord = record as CancelRequestedRecord;

            if (cancelRequestedRecord != null)
            {
                CreateTrackingCommand(cancelRequestedRecord);
                return;
            }

            FaultPropagationRecord faultPropagationRecord = record as FaultPropagationRecord;

            if (faultPropagationRecord != null)
            {
                CreateTrackingCommand(faultPropagationRecord);
                return;
            }


            ActivityStateRecord activityStateRecord = record as ActivityStateRecord;

            if (activityStateRecord != null)
            {
                CreateTrackingCommand(activityStateRecord);
                return;
            }

            WorkflowInstanceRecord workflowInstanceRecord = record as WorkflowInstanceRecord;

            if (workflowInstanceRecord != null)
            {
                CreateTrackingCommand(workflowInstanceRecord);
                return;
            }

            BookmarkResumptionRecord bookmarkResumptionRecord = record as BookmarkResumptionRecord;

            if (bookmarkResumptionRecord != null)
            {
                CreateTrackingCommand(bookmarkResumptionRecord);
                return;
            }

            CustomTrackingRecord customTrackingRecord = record as CustomTrackingRecord;

            if (customTrackingRecord != null)
            {
                CreateTrackingCommand(customTrackingRecord);
                return;
            }
        }
コード例 #2
0
        private void ProcessFaultPropagationRecord(FaultPropagationRecord faultPropagationRecord)
        {
            string pendingFaultedKey = FautedMessageKey(faultPropagationRecord.FaultSource);

            if (_pendingFaultedMessages.ContainsKey(pendingFaultedKey))
            {
                TaskProgressCallbackMessage progressCallbackMessage = _pendingFaultedMessages[pendingFaultedKey];
                _pendingFaultedMessages.Remove(pendingFaultedKey);
                progressCallbackMessage.Message = _formatError(faultPropagationRecord.Fault);
                PushProgressMessage(progressCallbackMessage, faultPropagationRecord.InstanceId);
            }
        }
コード例 #3
0
        private void TrackFaultPropagationRecord(FaultPropagationRecord faultRecord, ActualTrace _trace)
        {
            string faultName = (faultRecord.FaultHandler == null) ? "<Unknown>" : faultRecord.FaultHandler.Name;

            TestTraceManager.OptionalLogTrace("[InMemoryTrackingParticipant]faultPropatationRecord.TargetName = {0}", faultName);
            //string status = "Faulted";

            // There is no Property called State in FaultPropagationRecord. Need to understand Fault propagation here
            //this gets propogated twice by the product: ActivityStates.Fault information.
            //if (faultRecord.State == ActivityStates.Schedule)
            //{
            //    _trace.Add(new ActivityTrace(
            //        faultName,
            //        (ActivityInstanceState)Enum.Parse(typeof(ActivityInstanceState), status)));
            //}
        }
コード例 #4
0
 private void TrackFaultPropagationRecord(FaultPropagationRecord faultRecord)
 {
     if (WfEtwTrackingEventSource.Instance.FaultPropagationRecordIsEnabled())
     {
         WfEtwTrackingEventSource.Instance.FaultPropagationRecord(faultRecord.InstanceId,
                                                                  faultRecord.RecordNumber,
                                                                  faultRecord.EventTime,
                                                                  faultRecord.FaultSource.Name, faultRecord.FaultSource.Id, faultRecord.FaultSource.InstanceId, faultRecord.FaultSource.TypeName,
                                                                  faultRecord.FaultHandler != null ? faultRecord.FaultHandler.Name : string.Empty,
                                                                  faultRecord.FaultHandler != null ? faultRecord.FaultHandler.Id : string.Empty,
                                                                  faultRecord.FaultHandler != null ? faultRecord.FaultHandler.InstanceId : string.Empty,
                                                                  faultRecord.FaultHandler != null ? faultRecord.FaultHandler.TypeName : string.Empty,
                                                                  faultRecord.Fault.ToString(), faultRecord.IsFaultSource,
                                                                  faultRecord.HasAnnotations ? JsonConvert.SerializeObject(faultRecord.Annotations, Formatting.Indented) : emptyItemsTag,
                                                                  this.TrackingProfile == null ? string.Empty : this.TrackingProfile.Name, this.ApplicationReference);
     }
 }
コード例 #5
0
        protected override void Track(TrackingRecord record, TimeSpan timeout)
        {
            lock (this)
            {
                WorkflowInstanceUnhandledExceptionRecord unhandledExceptionRecord =
                    record as WorkflowInstanceUnhandledExceptionRecord;
                if (unhandledExceptionRecord != null)
                {
                    ProcessInstRecord(unhandledExceptionRecord);
                    Console.WriteLine("Exception executing workflow " + unhandledExceptionRecord);
                    return;
                }

                WorkflowInstanceRecord wfInstRecord = record as WorkflowInstanceRecord;
                if (wfInstRecord != null)
                {
                    ProcessInstRecord(wfInstRecord);
                    return;
                }

                ActivityStateRecord activityStateRecord = record as ActivityStateRecord;
                if (activityStateRecord != null)
                {
                    ProcessActivityStateRecord(activityStateRecord);
                    return;
                }

                FaultPropagationRecord faultPropagationRecord = record as FaultPropagationRecord;
                if (faultPropagationRecord != null)
                {
                    ProcessFaultPropagationRecord(faultPropagationRecord);
                    return;
                }

                CustomTrackingRecord customTrackingRecord = record as CustomTrackingRecord;
                if (customTrackingRecord != null)
                {
                    ProcessCustomTrackingRecord(customTrackingRecord);
                    return;
                }
            }
        }
コード例 #6
0
        void CreateTrackingCommand(FaultPropagationRecord record)
        {
            this.Procedure = "[MOJ.WorkflowManger.Tracking].[InsertFaultPropagationEvent]";

            this.parameters.Add(CreateTrackingCommandParameter("@WorkflowInstanceId", SqlDbType.UniqueIdentifier, null, record.InstanceId));
            this.parameters.Add(CreateTrackingCommandParameter("@RecordNumber", SqlDbType.BigInt, null, record.RecordNumber));
            this.parameters.Add(CreateTrackingCommandParameter("@TraceLevelId", SqlDbType.TinyInt, null, record.Level));
            this.parameters.Add(CreateTrackingCommandParameter("@ActivityRecordType", SqlDbType.NVarChar, 128, "FaultPropagation"));
            this.parameters.Add(CreateTrackingCommandParameter("@ActivityName", SqlDbType.NVarChar, 256, record.FaultSource.Name));
            this.parameters.Add(CreateTrackingCommandParameter("@ActivityId", SqlDbType.NVarChar, 256, record.FaultSource.Id));
            this.parameters.Add(CreateTrackingCommandParameter("@ActivityInstanceId", SqlDbType.NVarChar, 256, record.FaultSource.InstanceId));
            this.parameters.Add(CreateTrackingCommandParameter("@ActivityType", SqlDbType.NVarChar, 2048, record.FaultSource.TypeName));
            this.parameters.Add(CreateTrackingCommandParameter("@FaultDetails", SqlDbType.NVarChar, null, record.Fault.ToString()));
            this.parameters.Add(CreateTrackingCommandParameter("@FaultHandlerActivityName", SqlDbType.NVarChar, null, record.FaultHandler == null ? null : record.FaultHandler.Name));
            this.parameters.Add(CreateTrackingCommandParameter("@FaultHandlerActivityId", SqlDbType.NVarChar, 256, record.FaultHandler == null ? null : record.FaultHandler.Id));
            this.parameters.Add(CreateTrackingCommandParameter("@FaultHandlerActivityInstanceId", SqlDbType.NVarChar, 256, record.FaultHandler == null ? null : record.FaultHandler.InstanceId));
            this.parameters.Add(CreateTrackingCommandParameter("@FaultHandlerActivityType", SqlDbType.NVarChar, 2048, record.FaultHandler == null ? null : record.FaultHandler.TypeName));
            this.parameters.Add(CreateTrackingCommandParameter("@AnnotationsXml", SqlDbType.NVarChar, null, this.SerializeData(record.Annotations)));
            this.parameters.Add(CreateTrackingCommandParameter("@TimeCreated", SqlDbType.DateTime, null, record.EventTime));
        }
コード例 #7
0
        private void LogFaultPropagationRecord(FaultPropagationRecord record)
        {
            Contract.Requires(null != record);

            var annotations  = JsonConvert.SerializeObject(record.Annotations, Formatting.Indented);
            var fault        = JsonConvert.SerializeObject(record.Fault, Formatting.Indented);
            var faultHandler = JsonConvert.SerializeObject(record.FaultHandler, Formatting.Indented);
            var faultSource  = JsonConvert.SerializeObject(record.FaultSource, Formatting.Indented);

            Logger.Get(_loggingTrackingParticipantSettings.TraceSourceName)
            .TraceInformation("{0} {1} {2} - InstanceId = '{3}', Annotations = '{4}', Fault = '{5}',  FaultHandler = '{6}', FaultSource= '{7}', IsFaultSource = '{8}'",
                              record.GetType().Name,
                              record.EventTime,
                              record.Level,
                              record.InstanceId,
                              annotations,
                              fault,
                              faultHandler,
                              faultSource,
                              record.IsFaultSource
                              );
        }
コード例 #8
0
        private Event ProcessTrackingRecord(FaultPropagationRecord record)
        {
            if (record.IsFaultSource)
            {
                Event e = new Event();

                e.ContextGuid   = record.InstanceId;
                e.EventDateTime = record.EventTime;
                e.EventOrder    = record.RecordNumber;
                e.Operation     = record.FaultSource.Name;

                e.EventSeverity   = MapEventSeverity(record.Level);
                e.EventSource     = EventSource.Workflow;
                e.ExecutionStatus = ExecutionStatus.Faulted;

                e.Exception = record.Fault;

                return(e);
            }
            else
            {
                return(null);
            }
        }