void instance_ChildServiceRequested(object sender, ServiceRequestedEventArgs e)
        {
            Console.WriteLine(e.RequestedService);
            ServiceInstance instance = e.RequestedService;

            instance.StateChanged          += new EventHandler <ServiceStateChangedEventArgs>(instance_StateChanged);
            instance.OutcomeReported       += new EventHandler(instance_OutcomeReported);
            instance.ChildServiceRequested += new EventHandler <ServiceRequestedEventArgs>(instance_ChildServiceRequested);
            instance.ProgressReported      += new EventHandler(instance_ProgressReported);

            instance.Initialize();

            if (e.RequestedService.Configuration.Options["IsStep"] != null)
            {
                int sessionID = int.Parse(e.RequestedService.ParentInstance.ParentInstance.Configuration.Options["SessionID"]);
                lock (StepInstances)
                    StepInstances[sessionID] = e.RequestedService;
            }
            if (e.RequestedService.Configuration.Options["WizardRole"] == "ExecutorContainer")
            {
                int sessionID = int.Parse(e.RequestedService.ParentInstance.Configuration.Options["SessionID"]);
                lock (MainExecuters)
                    MainExecuters[sessionID] = e.RequestedService;
            }
            if (e.RequestedService.ParentInstance.Configuration.Options["WizardRole"] == "ExecutorContainer")
            {
                int sessionID = int.Parse(e.RequestedService.ParentInstance.ParentInstance.Configuration.Options["SessionID"]);
                lock (ExecuterSteps)
                {
                    if (ExecuterSteps.ContainsKey(sessionID))
                    {
                        ExecuterSteps[sessionID].Add(e.RequestedService);
                    }
                    else
                    {
                        List <ServiceInstance> listOfServiceInstances = new List <ServiceInstance>();
                        listOfServiceInstances.Add(e.RequestedService);
                        ExecuterSteps.Add(sessionID, listOfServiceInstances);
                    }
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Hanlde all necessary operations to run the service.
        /// </summary>
        /// <param name="service">The service to run.</param>
        private void RunService(ServiceInstance service)
        {
            service.StateChanged +=
                delegate(object sender, ServiceStateChangedEventArgs e)
            {
                if (service.State == ServiceState.Ready)
                {
                    service.Start();
                }
            };

            try
            {
                service.Initialize();
            }
            catch (Exception ex)
            {
                Log.Write(String.Format("Exception occured while performing RunService.", service.Configuration.Name), ex);
            }
        }
        public WizardSession Start(string WizardName)
        {
            //Debugger.Launch();

            //load the service from configuration file
            //CHANGED 1 (Service is taken from app.config- what to do if service not found?)
            int            wizardID;
            ServiceElement requestedWizardConfiguration = ServicesConfiguration.Services[WizardName];

            if (requestedWizardConfiguration == null)
            {
                throw new Exception("Wizard cannot be found");
            }



            //Get service data
            wizardID = int.Parse(requestedWizardConfiguration.Options["WizardID"]); //to insert in database it's int future
            //first step name
            ExecutionStepElement FirstStepCollector = GetFirstCollectorStep(requestedWizardConfiguration.ExecutionSteps);

            if (FirstStepCollector == null)
            {
                throw new Exception("No step collector found");
            }



            ActiveServiceElement configurationToRun = new ActiveServiceElement(requestedWizardConfiguration);


            //Initalize the main wizard service (account service...etc)

            ServiceInstance instance = Service.CreateInstance(configurationToRun);


            instance.ChildServiceRequested += new EventHandler <ServiceRequestedEventArgs>(instance_ChildServiceRequested);
            instance.ProgressReported      += new EventHandler(instance_ProgressReported);
            instance.StateChanged          += new EventHandler <ServiceStateChangedEventArgs>(instance_StateChanged);
            instance.OutcomeReported       += new EventHandler(instance_OutcomeReported);


            instance.Initialize();
            object sessionID = null;

            //Open new session by insert values in to the wizards_sessions_data table
            using (DataManager.Current.OpenConnection())
            {
                using (SqlCommand sqlCommand = DataManager.CreateCommand(@"INSERT INTO Wizards_Sessions_Data 
																		    (WizardID,CurrentStepName,ServiceInstanceID,WizardStatus)
																			Values (@WizardID:Int,@CurrentStepName:NvarChar,@ServiceInstanceID:BigInt,@WizardStatus:Int);SELECT @@IDENTITY"                                                                            ))
                {
                    sqlCommand.Parameters["@WizardID"].Value          = wizardID;
                    sqlCommand.Parameters["@CurrentStepName"].Value   = FirstStepCollector.Name;
                    sqlCommand.Parameters["@ServiceInstanceID"].Value = instance.InstanceID;
                    sqlCommand.Parameters["@WizardStatus"].Value      = WizardStatus.Collect;

                    sessionID = sqlCommand.ExecuteScalar();
                    if (sessionID == null)
                    {
                        throw new Exception("Error: Session not created");
                    }
                }
            }

            instance.Configuration.Options["SessionID"] = sessionID.ToString();

            //Create WizardSession object to return

            WizardSession wizardSession = new WizardSession();

            wizardSession.SessionID   = System.Convert.ToInt32(sessionID); //@@IDENTITY IS DECIMAL
            wizardSession.WizardID    = wizardID;
            wizardSession.CurrentStep = new StepConfiguration()
            {
                StepName = FirstStepCollector.Name
            };


            return(wizardSession);
        }