//---------------------------------------------------------------------------------------//

        private LabServerWebService GetLabServer(sbAuthHeader sbHeader)
        {
            const string STRLOG_MethodName = "GetLabServer";

            Logfile.WriteCalled(STRLOG_ClassName, STRLOG_MethodName);

            long   couponId      = sbHeader.couponID;
            string couponPasskey = sbHeader.couponPassKey;

            Logfile.Write(" Coupon Id: " + couponId.ToString());
            Logfile.Write(" Coupon Passkey: " + couponPasskey);

            LabServerWebService labServer = null;

            try
            {
                //
                // Get settings from Application's configuration file
                //
                string labserverId = couponId.ToString();

                Logfile.Write(" Labserver Id: " + labserverId);

                string labServerUrl  = Utilities.GetAppSetting(labserverId);
                string sbGuid        = Utilities.GetAppSetting(Consts.STRCFG_ServiceBrokerGuid);
                string sbToLsPasskey = Utilities.GetAppSetting(Consts.STRCFG_SbToLsPasskey);

                Logfile.Write(" ServiceBroker Guid: " + sbGuid);
                Logfile.Write(" Labserver Url: " + labServerUrl);
                Logfile.Write(" SBtoLS Passkey: " + sbToLsPasskey);

                //
                // Create LabServer interface
                //
                labServer     = new LabServerWebService();
                labServer.Url = labServerUrl;

                //
                // Create and fill in authorisation information
                //
                AuthHeader authHeader = new AuthHeader();
                authHeader.identifier     = sbGuid;
                authHeader.passKey        = sbToLsPasskey;
                labServer.AuthHeaderValue = authHeader;
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message);
                throw;
            }

            Logfile.WriteCompleted(STRLOG_ClassName, STRLOG_MethodName);

            return(labServer);
        }
        public SubmissionReport Submit(string labServerID, string experimentSpecification,
                                       int priorityHint, bool emailNotification)
        {
            LabServerWebService labServer        = GetLabServer(sbHeader);
            SubmissionReport    submissionReport = labServer.Submit(nextExperimentId, experimentSpecification, userGroup, priorityHint);

            if (submissionReport.vReport.accepted == true)
            {
                // Go to next experiment number
                nextExperimentId = GetNextExperimentID();
            }

            return(submissionReport);
        }
        public bool Cancel(int experimentID)
        {
            bool ok = false;

            try
            {
                LabServerWebService labServer = GetLabServer(sbHeader);
                ok = labServer.Cancel(experimentID);
            }
            catch (Exception)
            {
                throw new Exception("Cancel Failed.");
            }
            return(ok);
        }
        public LabStatus GetLabStatus(string labServerID)
        {
            const string STRLOG_MethodName = "GetLabStatus";

            Logfile.WriteCalled(STRLOG_ClassName, STRLOG_MethodName);

            LabServerWebService labServer = GetLabServer(sbHeader);
            LabStatus           labStatus = labServer.GetLabStatus();

            Logfile.Write(" Online: " + labStatus.online.ToString());
            Logfile.Write(" LabStatus Message: " + labStatus.labStatusMessage);

            Logfile.WriteCompleted(STRLOG_ClassName, STRLOG_MethodName);

            return(labStatus);
        }
        public void Notify(int experimentID)
        {
            const string STRLOG_MethodName = "Notify";

            string logMessage = STRLOG_ExperimentId + experimentID.ToString();

            Logfile.WriteCalled(STRLOG_ClassName, STRLOG_MethodName, logMessage);

            bool success = false;

            try
            {
                //
                // Check LabServer's header information is valid
                //
                if (sbHeader == null)
                {
                    throw new ArgumentNullException("sbHeader");
                }
                if (sbHeader.couponPassKey == null)
                {
                    throw new ArgumentNullException("couponPassKey");
                }

                //
                // Determine LabServer
                //
                string   strLabServerId  = sbHeader.couponID.ToString("X");
                string   strCsvLabServer = Utilities.GetAppSetting(strLabServerId);
                string[] strSplit        = strCsvLabServer.Split(new char[] { ',' });
                if (strSplit.Length < 3)
                {
                    throw new ArgumentException("CSV LabServer string has insufficient parameters");
                }

                //
                // Check for valid passkey
                //
                if (sbHeader.couponPassKey.Equals(strSplit[0].Trim(), StringComparison.OrdinalIgnoreCase) == false)
                {
                    throw new ArgumentException("couponPassKey is invalid");
                }

                //
                // Create LabServer interface
                //
                string labserverUrl = strSplit[1].Trim();

                LabServerWebService labServer = new LabServerWebService();
                labServer.Url = labserverUrl;

                //
                // Create and fill in authorisation information
                //
                string sbGuid        = Utilities.GetAppSetting(Consts.STRCFG_ServiceBrokerGuid);
                string sbToLsPasskey = strSplit[2].Trim();

                AuthHeader authHeader = new AuthHeader();
                authHeader.identifier     = sbGuid;
                authHeader.passKey        = sbToLsPasskey;
                labServer.AuthHeaderValue = authHeader;

                //
                // Retrieve result from LabServer
                //
                LabExperimentStatus labExperimentStatus = labServer.GetExperimentStatus(experimentID);
                if ((labExperimentStatus != null) && (labExperimentStatus.statusReport != null) &&
                    (labExperimentStatus.statusReport.statusCode >= (int)StatusCodes.Completed) &&
                    (labExperimentStatus.statusReport.statusCode != (int)StatusCodes.Unknown))
                {
                    ResultReport resultReport = labServer.RetrieveResult(experimentID);
                }

                success = true;
            }
            catch (Exception ex)
            {
                Logfile.WriteError(ex.Message);
            }

            logMessage = STRLOG_Success + success.ToString();

            Logfile.WriteCompleted(STRLOG_ClassName, STRLOG_MethodName, logMessage);
        }
        public ValidationReport Validate(string labServerID, string experimentSpecification)
        {
            LabServerWebService labServer = GetLabServer(sbHeader);

            return(labServer.Validate(experimentSpecification, userGroup));
        }
        public ResultReport RetrieveResult(int experimentID)
        {
            LabServerWebService labServer = GetLabServer(sbHeader);

            return(labServer.RetrieveResult(experimentID));
        }
        public string GetLabInfo(string labServerID)
        {
            LabServerWebService labServer = GetLabServer(sbHeader);

            return(labServer.GetLabInfo());
        }
        public string GetLabConfiguration(string labServerID)
        {
            LabServerWebService labServer = GetLabServer(sbHeader);

            return(labServer.GetLabConfiguration(userGroup));
        }
        public LabExperimentStatus GetExperimentStatus(int experimentID)
        {
            LabServerWebService labServer = GetLabServer(sbHeader);

            return(labServer.GetExperimentStatus(experimentID));
        }
        public WaitEstimate GetEffectiveQueueLength(string labServerID, int priorityHint)
        {
            LabServerWebService labServer = GetLabServer(sbHeader);

            return(labServer.GetEffectiveQueueLength(userGroup, priorityHint));
        }