using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.ServiceModel;
using SSLMS.Service;
using SSLMS.IService;
using System.ServiceModel.Description;

namespace SSLMS.Host
{
    public partial class IO : ServiceBase
    {

        ServiceHost shBase;
        ServiceHost shB;
        ServiceHost shST;
        ServiceHost shWF;
        ServiceHost shSAP;
        ServiceHost shIO;
        public IO()
        {
            InitializeComponent();
            
        }

        protected override void OnStart(string[] args)
        {
            // TODO: 在此处添加代码以启动服务。

            try
            {
                this.IOeventLog.WriteEntry("The service sh_Base starting.");

                shBase = new ServiceHost(typeof(S_Base), new Uri(string.Format(Program._BaseUrl + "/Base")));

                shBase.AddServiceEndpoint(typeof(I_Base), new WSHttpBinding(SecurityMode.None), "");

                ServiceMetadataBehavior smbBase = new ServiceMetadataBehavior();

                smbBase.HttpGetEnabled = true;

                shBase.Description.Behaviors.Add(smbBase);

                shBase.Open();

                this.IOeventLog.WriteEntry("The service sh_Base is ready.");



                this.IOeventLog.WriteEntry("The service sh_B starting.");
                 shB = new ServiceHost(typeof(S_B), new Uri(string.Format(Program._BaseUrl + "/B")));

                shB.AddServiceEndpoint(typeof(I_B), new WSHttpBinding(SecurityMode.None), "");

                ServiceMetadataBehavior smbB = new ServiceMetadataBehavior();

                smbB.HttpGetEnabled = true;

                shB.Description.Behaviors.Add(smbB);

                shB.Open();

                this.IOeventLog.WriteEntry("The service sh_B is ready.");


                this.IOeventLog.WriteEntry("The service sh_IO starting.");
                shIO = new ServiceHost(typeof(S_IO), new Uri(string.Format(Program._BaseUrl + "/IO")));

                shIO.AddServiceEndpoint(typeof(I_IO), new WSHttpBinding(SecurityMode.None), "");

                ServiceMetadataBehavior smbIO = new ServiceMetadataBehavior();

                smbIO.HttpGetEnabled = true;

                shIO.Description.Behaviors.Add(smbIO);

                shIO.Open();

                this.IOeventLog.WriteEntry("The service sh_IO is ready.");


                 this.IOeventLog.WriteEntry("The service sh_ST starting.");
                 shST = new ServiceHost(typeof(S_ST), new Uri(string.Format(Program._BaseUrl + "/ST")));

                shST.AddServiceEndpoint(typeof(I_ST), new WSHttpBinding(SecurityMode.None), "");

                ServiceMetadataBehavior smbST = new ServiceMetadataBehavior();

                smbST.HttpGetEnabled = true;

                shST.Description.Behaviors.Add(smbST);

                shST.Open();

                 this.IOeventLog.WriteEntry("The service sh_ST is ready.", EventLogEntryType.Error);



                  this.IOeventLog.WriteEntry("The service sh_WF starting.");
                 shWF = new ServiceHost(typeof(S_WF), new Uri(string.Format(Program._BaseUrl + "/WF")));

                shWF.AddServiceEndpoint(typeof(I_WF), new WSHttpBinding(SecurityMode.None), "");

                ServiceMetadataBehavior smbWF = new ServiceMetadataBehavior();

                smbWF.HttpGetEnabled = true;

                shWF.Description.Behaviors.Add(smbWF);

                shWF.Open();

                 this.IOeventLog.WriteEntry("The service sh_WF is ready.", EventLogEntryType.Error);

                this.IOeventLog.WriteEntry("The service sh_SAP starting.");
                 shSAP = new ServiceHost(typeof(S_SAP), new Uri(string.Format(Program._BaseUrl + "/SAP")));

                shSAP.AddServiceEndpoint(typeof(I_SAP), new WSHttpBinding(SecurityMode.None), "");

                ServiceMetadataBehavior smbSAP = new ServiceMetadataBehavior();

                smbSAP.HttpGetEnabled = true;

                shSAP.Description.Behaviors.Add(smbSAP);

                shSAP.Open();

                this.IOeventLog.WriteEntry("The service sh_WF is ready.", EventLogEntryType.Error);

                


                




            }
            catch (CommunicationException ce)
            {
                this.IOeventLog.WriteEntry(string.Format("An exception occurred: {0}", ce.Message));
            }



        }

        protected override void OnStop()
        {
            // TODO: 在此处添加代码以执行停止服务所需的关闭操作。
            this.shBase.Close();
            this. shB.Close();
            this.shIO.Close();
            this. shST.Close();
            this. shWF.Close();
            this. shSAP.Close();
        }
    }
}