コード例 #1
0
ファイル: Repository.cs プロジェクト: jgoodso2/PMIS
        /// <summary>
        /// Wait for the queue job completion of the specified message type.
        /// </summary>
        /// <param name="trackingGuid">Tracking GUID, used for getting the job group wait time. 
        ///    Not used in this implementation.</param>
        /// <param name="messageType">Type of queue message, specified by SvcQueueSystemQueueMsgType.
        ///    BugBug: using -1 for now.</param>
        /// <returns></returns>
        public static bool WaitForQueueJobCompletion(Guid jobGUID, Guid trackingGuid, int messageType)
        {
            SvcQueueSystem.QueueStatusDataSet queueStatusDataSet = new SvcQueueSystem.QueueStatusDataSet();
            SvcQueueSystem.QueueStatusRequestDataSet queueStatusRequestDataSet =
                new SvcQueueSystem.QueueStatusRequestDataSet();

            SvcQueueSystem.QueueStatusRequestDataSet.StatusRequestRow statusRequestRow =
                queueStatusRequestDataSet.StatusRequest.NewStatusRequestRow();
            statusRequestRow.JobGUID = jobGUID;
            statusRequestRow.JobGroupGUID = Guid.NewGuid();
            statusRequestRow.MessageType = messageType;
            queueStatusRequestDataSet.StatusRequest.AddStatusRequestRow(statusRequestRow);

            bool inProcess = true;
            bool result = false;
            DateTime startTime = DateTime.Now;
            int successState = (int)SvcQueueSystem.JobState.Success;
            int failedState = (int)SvcQueueSystem.JobState.Failed;
            int blockedState = (int)SvcQueueSystem.JobState.CorrelationBlocked;

            List<int> errorList = new List<int>();

            using (OperationContextScope scope = new OperationContextScope(queueSystemClient.InnerChannel))
            {

                while (inProcess)
                {
                    queueStatusDataSet = queueSystemClient.ReadJobStatus(queueStatusRequestDataSet, false,
                        SvcQueueSystem.SortColumn.Undefined, SvcQueueSystem.SortOrder.Undefined);

                    foreach (SvcQueueSystem.QueueStatusDataSet.StatusRow statusRow in queueStatusDataSet.Status)
                    {
                        if (statusRow["ErrorInfo"] != System.DBNull.Value)
                        {
                            errorList = CheckStatusRowErrors(statusRow["ErrorInfo"].ToString());

                            if (errorList.Count > 0
                                || statusRow.JobCompletionState == blockedState
                                || statusRow.JobCompletionState == failedState)
                            {
                                inProcess = false;
                                ShowErrorList("Queue", statusRow.JobCompletionState, errorList);
                            }
                        }
                        if (statusRow.JobCompletionState == successState)
                        {
                            inProcess = false;
                            result = true;
                        }
                        else
                        {
                            inProcess = true;
                            System.Threading.Thread.Sleep(500);  // Sleep 1/2 second.
                        }
                    }
                    DateTime endTime = DateTime.Now;
                    TimeSpan span = endTime.Subtract(startTime);

                    if (span.Seconds > 20) //Wait for only 20 secs - and then bail out.
                    {
                        Console.Write("Something is wrong in the queue. Check or clear the queue and then redo your action.");
                        inProcess = false;
                        result = false;
                    }
                }
            }
            return result;
        }
コード例 #2
0
ファイル: Helpers.cs プロジェクト: jgoodso2/PMIS
        // Wait for the queue jobs to complete.
        public static bool WaitForQueue(SvcQueueSystem.QueueMsgType jobType,
            SvcQueueSystem.QueueSystemClient queueSystemClient,
            DateTime startTime)
        {
            const int MAX_WAIT = 60;    // Maximum wait time, in seconds.
            int numJobs = 1;            // Number of jobs in the queue.
            bool completed = false;     // Queue job completed.
            SvcQueueSystem.QueueStatusDataSet queueStatusDs =
                new SvcQueueSystem.QueueStatusDataSet();

            int timeout = 0;            // Number of seconds waited.
            Console.Write("Waiting for job: {0} ", jobType.ToString());

            SvcQueueSystem.QueueMsgType[] messageTypes = { jobType };
            SvcQueueSystem.JobState[] jobStates = { SvcQueueSystem.JobState.Success };

            while (timeout < MAX_WAIT)
            {
                System.Threading.Thread.Sleep(1000);    // Sleep one second.

                queueStatusDs = queueSystemClient.ReadMyJobStatus(
                    messageTypes,
                    jobStates,
                    startTime,
                    DateTime.Now,
                    numJobs,
                    true,
                    SvcQueueSystem.SortColumn.QueuePosition,
                    SvcQueueSystem.SortOrder.LastOrder);

                timeout++;
                Console.Write(".");
            }
            Console.WriteLine();

            if (queueStatusDs.Status.Count == numJobs)
                completed = true;
            return completed;
        }
コード例 #3
0
        public static bool WaitForQueueJobCompletion(Guid trackingGuid, int messageType, SvcQueueSystem.QueueSystemClient queueSystemClient)
        {
            //System.Threading.Thread.Sleep(2000);
            SvcQueueSystem.QueueStatusDataSet queueStatusDataSet = new SvcQueueSystem.QueueStatusDataSet();
            SvcQueueSystem.QueueStatusRequestDataSet queueStatusRequestDataSet =
                new SvcQueueSystem.QueueStatusRequestDataSet();

            SvcQueueSystem.QueueStatusRequestDataSet.StatusRequestRow statusRequestRow =
                queueStatusRequestDataSet.StatusRequest.NewStatusRequestRow();
            statusRequestRow.JobGUID = trackingGuid; //Guid.NewGuid();
            statusRequestRow.JobGroupGUID = Guid.NewGuid();
            statusRequestRow.MessageType = messageType;
            queueStatusRequestDataSet.StatusRequest.AddStatusRequestRow(statusRequestRow);

            bool inProcess = true;
            bool result = false;
            DateTime startTime = DateTime.Now;
            int successState = (int)SvcQueueSystem.JobState.Success;
            int failedState = (int)SvcQueueSystem.JobState.Failed;
            int blockedState = (int)SvcQueueSystem.JobState.CorrelationBlocked;

            List<int> errorList = new List<int>();

                while (inProcess)
                {

                        queueStatusDataSet = queueSystemClient.ReadJobStatus(queueStatusRequestDataSet, false,
                        SvcQueueSystem.SortColumn.Undefined, SvcQueueSystem.SortOrder.Undefined);

                    bool noRow = true;
                    foreach (SvcQueueSystem.QueueStatusDataSet.StatusRow statusRow in queueStatusDataSet.Status)
                    {
                        noRow = false;
                        if (statusRow["ErrorInfo"] != System.DBNull.Value)
                        {
                            errorList = CheckStatusRowErrors(statusRow["ErrorInfo"].ToString());

                            if (errorList.Count > 0
                                || statusRow.JobCompletionState == blockedState
                                || statusRow.JobCompletionState == failedState)
                            {
                                inProcess = false;

                            }
                        }
                        if (statusRow.JobCompletionState == successState)
                        {
                            inProcess = false;
                            result = true;
                        }
                        else
                        {
                            inProcess = true;
                            System.Threading.Thread.Sleep(500);  // Sleep 1/2 second.
                        }
                    }
                    if (noRow) return true;
                    DateTime endTime = DateTime.Now;
                    TimeSpan span = endTime.Subtract(startTime);

                    if (span.Seconds > 20) //Wait for only 20 secs - and then bail out.
                    {
                        return result;//result = false;
                    }
                }
            return result;
        }