public OneTimeJobResult <T> ExecuteJobAndGetResult <T>(
     string engineName,
     JobDescription jobDescription,
     CredentialBase jobCredential,
     JobResultDataFormatType resultDataFormat,
     string jobType)
     where T : class, new()
 {
     this.RouteJobToEngine(jobDescription, engineName);
     using (OneTimeJobRawResult timeJobRawResult = this.oneTimeJobManager.ExecuteJob(jobDescription, jobCredential))
     {
         string error = timeJobRawResult.Error;
         if (!timeJobRawResult.Success)
         {
             OneTimeJobService.log.WarnFormat(jobType + " credential test failed: " + timeJobRawResult.Error, Array.Empty <object>());
             string messageFromException = this.GetLocalizedErrorMessageFromException(timeJobRawResult.ExceptionFromJob);
             return(new OneTimeJobResult <T>()
             {
                 Success = false,
                 Message = string.IsNullOrEmpty(messageFromException) ? error : messageFromException
             });
         }
         try
         {
             T obj;
             if (resultDataFormat == JobResultDataFormatType.Xml)
             {
                 using (XmlTextReader xmlTextReader = new XmlTextReader(timeJobRawResult.JobResultStream))
                 {
                     xmlTextReader.Namespaces = false;
                     obj = (T) new XmlSerializer(typeof(T)).Deserialize((XmlReader)xmlTextReader);
                 }
             }
             else
             {
                 obj = SerializationHelper.Deserialize <T>(timeJobRawResult.JobResultStream);
             }
             return(new OneTimeJobResult <T>()
             {
                 Success = true,
                 Value = obj
             });
         }
         catch (Exception ex)
         {
             OneTimeJobService.log.Error((object)string.Format("Failed to deserialize {0} credential test job result: {1}", (object)jobType, (object)ex));
             return(new OneTimeJobResult <T>()
             {
                 Success = false,
                 Message = this.GetLocalizedErrorMessageFromException(timeJobRawResult.ExceptionFromJob)
             });
         }
     }
 }
        // Token: 0x060005C0 RID: 1472 RVA: 0x00022798 File Offset: 0x00020998
        public OneTimeJobResult <T> ExecuteJobAndGetResult <T>(string engineName, JobDescription jobDescription, CredentialBase jobCredential, JobResultDataFormatType resultDataFormat, string jobType) where T : class, new()
        {
            this.RouteJobToEngine(jobDescription, engineName);
            OneTimeJobResult <T> result;

            using (OneTimeJobRawResult oneTimeJobRawResult = this.oneTimeJobManager.ExecuteJob(jobDescription, jobCredential))
            {
                string error = oneTimeJobRawResult.Error;
                if (!oneTimeJobRawResult.Success)
                {
                    OneTimeJobService.log.WarnFormat(jobType + " credential test failed: " + oneTimeJobRawResult.Error, Array.Empty <object>());
                    string localizedErrorMessageFromException = this.GetLocalizedErrorMessageFromException(oneTimeJobRawResult.ExceptionFromJob);
                    result = new OneTimeJobResult <T>
                    {
                        Success = false,
                        Message = (string.IsNullOrEmpty(localizedErrorMessageFromException) ? error : localizedErrorMessageFromException)
                    };
                }
                else
                {
                    try
                    {
                        T value;
                        if (resultDataFormat == JobResultDataFormatType.Xml)
                        {
                            using (XmlTextReader xmlTextReader = new XmlTextReader(oneTimeJobRawResult.JobResultStream))
                            {
                                xmlTextReader.Namespaces = false;
                                value = (T)((object)new XmlSerializer(typeof(T)).Deserialize(xmlTextReader));
                                goto IL_CF;
                            }
                        }
                        value = SerializationHelper.Deserialize <T>(oneTimeJobRawResult.JobResultStream);
IL_CF:
                        result = new OneTimeJobResult <T>
                        {
                            Success = true,
                            Value   = value
                        };
                    }
                    catch (Exception arg)
                    {
                        OneTimeJobService.log.Error(string.Format("Failed to deserialize {0} credential test job result: {1}", jobType, arg));
                        result = new OneTimeJobResult <T>
                        {
                            Success = false,
                            Message = this.GetLocalizedErrorMessageFromException(oneTimeJobRawResult.ExceptionFromJob)
                        };
                    }
                }
            }
            return(result);
        }
        // Token: 0x060005A9 RID: 1449 RVA: 0x00022360 File Offset: 0x00020560
        protected override void ProcessJobResult(FinishedJobInfo jobResult)
        {
            Guid scheduledJobId = jobResult.ScheduledJobId;

            OneTimeJobManager.PendingJobItem pendingJobItem;
            if (this.pendingJobs.TryGetValue(scheduledJobId, out pendingJobItem))
            {
                OneTimeJobRawResult result = default(OneTimeJobRawResult);
                try
                {
                    result.Success = (jobResult.Result.State == 6 && string.IsNullOrEmpty(jobResult.Result.Error));
                    if (jobResult.Result.IsResultStreamed)
                    {
                        using (IJobSchedulerHelper jobSchedulerHelper = this.jobSchedulerHelperFactory())
                        {
                            using (Stream jobResultStream = jobSchedulerHelper.GetJobResultStream(jobResult.Result.JobId, "JobResult"))
                            {
                                result.JobResultStream = new DynamicStream();
                                jobResultStream.CopyTo(result.JobResultStream);
                                result.JobResultStream.Position = 0L;
                            }
                            jobSchedulerHelper.DeleteJobResult(jobResult.Result.JobId);
                            goto IL_100;
                        }
                    }
                    if (jobResult.Result.Output != null && jobResult.Result.Output.Length != 0)
                    {
                        result.JobResultStream = new MemoryStream(jobResult.Result.Output);
                    }
IL_100:
                    result.Error = jobResult.Result.Error;
                    OneTimeJobManager.Logger.InfoFormat("Result of one time job {0} received", scheduledJobId);
                }
                catch (Exception ex)
                {
                    result.Success = false;
                    result.Error   = Resources.TestErrorInvalidResult;
                    OneTimeJobManager.Logger.ErrorFormat("Failed to process result of one time job {0}: {1}", scheduledJobId, ex);
                }
                pendingJobItem.Done(result);
                return;
            }
            OneTimeJobManager.Logger.ErrorFormat("Result of unknown job {0} received", scheduledJobId);
            if (jobResult.Result != null && jobResult.Result.IsResultStreamed)
            {
                using (IJobSchedulerHelper jobSchedulerHelper2 = this.jobSchedulerHelperFactory())
                {
                    jobSchedulerHelper2.DeleteJobResult(jobResult.Result.JobId);
                }
            }
        }
Exemplo n.º 4
0
        protected override void ProcessJobResult(FinishedJobInfo jobResult)
        {
            Guid scheduledJobId = jobResult.get_ScheduledJobId();

            OneTimeJobManager.PendingJobItem pendingJobItem;
            if (this.pendingJobs.TryGetValue(scheduledJobId, out pendingJobItem))
            {
                OneTimeJobRawResult result = new OneTimeJobRawResult();
                try
                {
                    result.Success = jobResult.get_Result().get_State() == 6 && string.IsNullOrEmpty(jobResult.get_Result().get_Error());
                    if (jobResult.get_Result().get_IsResultStreamed())
                    {
                        using (IJobSchedulerHelper ijobSchedulerHelper = this.jobSchedulerHelperFactory())
                        {
                            using (Stream jobResultStream = ((IJobScheduler)ijobSchedulerHelper).GetJobResultStream(jobResult.get_Result().get_JobId(), "JobResult"))
                            {
                                result.JobResultStream = (Stream) new DynamicStream();
                                jobResultStream.CopyTo(result.JobResultStream);
                                result.JobResultStream.Position = 0L;
                            }
                            ((IJobScheduler)ijobSchedulerHelper).DeleteJobResult(jobResult.get_Result().get_JobId());
                        }
                    }
                    else if (jobResult.get_Result().get_Output() != null && jobResult.get_Result().get_Output().Length != 0)
                    {
                        result.JobResultStream = (Stream) new MemoryStream(jobResult.get_Result().get_Output());
                    }
                    result.Error = jobResult.get_Result().get_Error();
                    OneTimeJobManager.Logger.InfoFormat("Result of one time job {0} received", (object)scheduledJobId);
                }
                catch (Exception ex)
                {
                    result.Success = false;
                    result.Error   = Resources.get_TestErrorInvalidResult();
                    OneTimeJobManager.Logger.ErrorFormat("Failed to process result of one time job {0}: {1}", (object)scheduledJobId, (object)ex);
                }
                pendingJobItem.Done(result);
            }
            else
            {
                OneTimeJobManager.Logger.ErrorFormat("Result of unknown job {0} received", (object)scheduledJobId);
                if (jobResult.get_Result() == null || !jobResult.get_Result().get_IsResultStreamed())
                {
                    return;
                }
                using (IJobSchedulerHelper ijobSchedulerHelper = this.jobSchedulerHelperFactory())
                    ((IJobScheduler)ijobSchedulerHelper).DeleteJobResult(jobResult.get_Result().get_JobId());
            }
        }
        // Token: 0x060005A8 RID: 1448 RVA: 0x000222E0 File Offset: 0x000204E0
        protected override void ProcessJobFailure(FinishedJobInfo jobResult)
        {
            Guid scheduledJobId = jobResult.ScheduledJobId;

            OneTimeJobManager.PendingJobItem pendingJobItem;
            if (this.pendingJobs.TryGetValue(scheduledJobId, out pendingJobItem))
            {
                OneTimeJobRawResult result = new OneTimeJobRawResult
                {
                    Success = false,
                    Error   = Resources.TestErrorJobFailed
                };
                OneTimeJobManager.Logger.WarnFormat("Job {0} failed with error: {1}", scheduledJobId, jobResult.Result.Error);
                pendingJobItem.Done(result);
                return;
            }
            OneTimeJobManager.Logger.ErrorFormat("Failure of unknown job {0} received", scheduledJobId);
        }
Exemplo n.º 6
0
        protected override void ProcessJobFailure(FinishedJobInfo jobResult)
        {
            Guid scheduledJobId = jobResult.get_ScheduledJobId();

            OneTimeJobManager.PendingJobItem pendingJobItem;
            if (this.pendingJobs.TryGetValue(scheduledJobId, out pendingJobItem))
            {
                OneTimeJobRawResult result = new OneTimeJobRawResult()
                {
                    Success = false,
                    Error   = Resources.get_TestErrorJobFailed()
                };
                OneTimeJobManager.Logger.WarnFormat("Job {0} failed with error: {1}", (object)scheduledJobId, (object)jobResult.get_Result().get_Error());
                pendingJobItem.Done(result);
            }
            else
            {
                OneTimeJobManager.Logger.ErrorFormat("Failure of unknown job {0} received", (object)scheduledJobId);
            }
        }
        // Token: 0x060005A6 RID: 1446 RVA: 0x00022104 File Offset: 0x00020304
        public OneTimeJobRawResult ExecuteJob(JobDescription jobDescription, CredentialBase jobCredential = null)
        {
            if (this.listenerUri == string.Empty)
            {
                JobSchedulerEventServicev2.log.Error("ListenerUri remains uninitialized");
                OneTimeJobRawResult result = new OneTimeJobRawResult
                {
                    Success = false,
                    Error   = Resources.TestErrorJobFailed
                };
                return(result);
            }
            if (jobCredential != null)
            {
                jobDescription.Credential = this.EncryptCredentials(jobCredential);
            }
            if (jobDescription.SupportedRoles == null)
            {
                jobDescription.SupportedRoles = 7;
            }
            ScheduledJob job = new ScheduledJob
            {
                NotificationAddress = this.listenerUri,
                State     = "CoreOneTimeJob",
                RunOnce   = true,
                IsOneShot = true,
                Job       = jobDescription
            };
            Guid guid;

            try
            {
                guid = this.SubmitScheduledJobToScheduler(job);
                OneTimeJobManager.Logger.DebugFormat("Job {0} scheduled", guid);
            }
            catch (Exception ex)
            {
                OneTimeJobManager.Logger.ErrorFormat("Failed to submit job: {0}", ex);
                OneTimeJobRawResult result = default(OneTimeJobRawResult);
                result.Success          = false;
                result.Error            = Resources.TestErrorJobFailed;
                result.ExceptionFromJob = ex;
                return(result);
            }
            TimeSpan timeSpan = jobDescription.Timeout.Add(this.jobTimeoutTolerance);

            OneTimeJobManager.PendingJobItem pendingJobItem = new OneTimeJobManager.PendingJobItem();
            this.pendingJobs[guid] = pendingJobItem;
            if (this.JobStarted != null)
            {
                this.JobStarted(this, new OneTimeJobManager.JobStartedEventArgs(guid));
            }
            OneTimeJobRawResult result2;

            if (pendingJobItem.WaitHandle.WaitOne(timeSpan))
            {
                result2 = pendingJobItem.RawResult;
            }
            else
            {
                OneTimeJobManager.Logger.ErrorFormat("No result from job {0} received before timeout ({1})", guid, timeSpan);
                result2 = new OneTimeJobRawResult
                {
                    Success = false,
                    Error   = Resources.TestErrorTimeout
                };
            }
            this.pendingJobs.TryRemove(guid, out pendingJobItem);
            return(result2);
        }
 // Token: 0x06000B94 RID: 2964 RVA: 0x0004923D File Offset: 0x0004743D
 public void Done(OneTimeJobRawResult result)
 {
     this.RawResult = result;
     this.waitHandle.Set();
 }
Exemplo n.º 9
0
        public OneTimeJobRawResult ExecuteJob(
            JobDescription jobDescription,
            CredentialBase jobCredential = null)
        {
            if (this.listenerUri == string.Empty)
            {
                JobSchedulerEventServicev2.log.Error((object)"ListenerUri remains uninitialized");
                return(new OneTimeJobRawResult()
                {
                    Success = false,
                    Error = Resources.get_TestErrorJobFailed()
                });
            }
            if (jobCredential != null)
            {
                jobDescription.set_Credential(this.EncryptCredentials(jobCredential));
            }
            if (jobDescription.get_SupportedRoles() == null)
            {
                jobDescription.set_SupportedRoles((PackageType)7);
            }
            ScheduledJob scheduledJob = new ScheduledJob();

            scheduledJob.set_NotificationAddress(this.listenerUri);
            scheduledJob.set_State("CoreOneTimeJob");
            scheduledJob.set_RunOnce(true);
            scheduledJob.set_IsOneShot(true);
            scheduledJob.set_Job(jobDescription);
            ScheduledJob job = scheduledJob;
            Guid         scheduler;

            try
            {
                scheduler = this.SubmitScheduledJobToScheduler(job);
                OneTimeJobManager.Logger.DebugFormat("Job {0} scheduled", (object)scheduler);
            }
            catch (Exception ex)
            {
                OneTimeJobManager.Logger.ErrorFormat("Failed to submit job: {0}", (object)ex);
                OneTimeJobRawResult timeJobRawResult = new OneTimeJobRawResult();
                timeJobRawResult.Success          = false;
                timeJobRawResult.Error            = Resources.get_TestErrorJobFailed();
                timeJobRawResult.ExceptionFromJob = ex;
                timeJobRawResult = timeJobRawResult;
                return(timeJobRawResult);
            }
            TimeSpan timeout = jobDescription.get_Timeout().Add(this.jobTimeoutTolerance);

            OneTimeJobManager.PendingJobItem pendingJobItem = new OneTimeJobManager.PendingJobItem();
            this.pendingJobs[scheduler] = pendingJobItem;
            if (this.JobStarted != null)
            {
                this.JobStarted((object)this, (EventArgs) new OneTimeJobManager.JobStartedEventArgs(scheduler));
            }
            OneTimeJobRawResult timeJobRawResult1;

            if (pendingJobItem.WaitHandle.WaitOne(timeout))
            {
                timeJobRawResult1 = pendingJobItem.RawResult;
            }
            else
            {
                OneTimeJobManager.Logger.ErrorFormat("No result from job {0} received before timeout ({1})", (object)scheduler, (object)timeout);
                timeJobRawResult1 = new OneTimeJobRawResult()
                {
                    Success = false,
                    Error   = Resources.get_TestErrorTimeout()
                };
            }
            this.pendingJobs.TryRemove(scheduler, out pendingJobItem);
            return(timeJobRawResult1);
        }