FREE Subscription to Dr. Dobb’s Digest: Same Great Content, New Digital Edition
Site Archive (Complete)
Dobbs M-Dev
Email
Print
Reprint

add to:
Del.icio.us
Digg
Google
Furl
Slashdot
Y! MyWeb
Blink
May 01, 2002

Create Windows Services in the .Net Framework

(Page 7 of 8)
Create Windows Services in the .Net Framework

Example 1:
The main source module for SqlServiceMonitor

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.ServiceProcess;
using System.Threading;

namespace SqlMonitorService
{
    public class SqlMonitorService : 
System.ServiceProcess.ServiceBase
    {
        /// <summary> 
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.Container components = null;
        private bool m_IsRunning=false;
        private MonitorThread monitorThread = null;

        public SqlMonitorService()
        {
            // This call is required by the Windows.Forms 
//    Component Designer.
            InitializeComponent();

// TODO: Add any initialization after the 
//     InitComponent call
            monitorThread = new MonitorThread();
            monitorThread.ServerName="Dell933";
            monitorThread.DatabaseName="TEST";
            monitorThread.SQLUser="sa";
            monitorThread.SQLPassword="badpassword";
            monitorThread.interval=120;
            monitorThread.eventSource="SqlServiceMonitor";
        }

        // The main entry point for the process
        static void Main()
        {
            System.ServiceProcess.ServiceBase[] ServicesToRun;
    
            ServicesToRun = new 
                        System.ServiceProcess.ServiceBase[] { 
                        new SqlMonitorService() };

            System.ServiceProcess.ServiceBase.Run(ServicesToRun);
        }

        /// <summary> 
        /// Required method for Designer support - do not modify 
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            // 
            // SqlMonitorService
            // 
            this.ServiceName = "SqlServiceMonitor";


        }

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null) 
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        /// <summary>
        /// Set things in motion so your service can do its work.
        /// </summary>
        protected override void OnStart(string[] args)
        {
            // Create the thread object, passing in the 
//    monitorThread.workerThread method
            // using a ThreadStart delegate.
            Thread InstanceCaller = 
new Thread(
new ThreadStart(
monitorThread.workerThread)
);

            IsRunning=true;
            // Start the thread.
            InstanceCaller.Start();

        }
 
        /// <summary>
        /// Stop this service.
        /// </summary>
        protected override void OnStop()
        {
            // TODO: Add code here to perform any tear-down 
            //     necessary to stop your service.
            IsRunning=false;
        }

        /// <summary>
        /// Used to trigger service stop
        /// </summary>
        public bool IsRunning
        {
            get
            {
                return m_IsRunning;
            }
            set
            {
                m_IsRunning=value;
                monitorThread.IsRunning=value;
            }
        }
    }
    class MonitorThread
    {
        public bool IsRunning = false;
        public string ServerName;
        public string DatabaseName;
        public string SQLUser;
        public string SQLPassword;
        public string eventSource;
        public int interval;

        public void onSuccess(string message)
        {
            if (!EventLog.SourceExists(eventSource))
            {
                EventLog.CreateEventSource(eventSource,"Application");
            }
            EventLog MyLog=new EventLog();
            MyLog.Source=eventSource;
            MyLog.WriteEntry(
                message,System.Diagnostics.EventLogEntryType.Information);
        }
        public void onFailure(string message)
        {
            if (!EventLog.SourceExists(eventSource))
            {
                EventLog.CreateEventSource(eventSource,"Application");
            }
            EventLog MyLog=new EventLog();
            MyLog.Source=eventSource;
            MyLog.WriteEntry(
                message,System.Diagnostics.EventLogEntryType.Error);
        }

        public void workerThread()
        {
            int Seconds;
            string SqlString;
            string message;
            System.Data.SqlClient.SqlConnection cn;
            while ( IsRunning )
            {
                // While being responsive, wait interval seconds...
                //        Alternatives: Use Mutex or some other
                //        object, and do wait with timeout for 
                //        longer period...
                Seconds=0;
                while ( IsRunning && Seconds<(interval) )
                {
                    System.Threading.Thread.Sleep(1000);
                    Seconds++;
                }
                // We waited interval seconds, now see if we can connect...

                SqlString="User ID="+SQLUser+";Pwd="+SQLPassword+";
                        Initial Catalog="+DatabaseName+";Server="+ServerName;
                try
                {
                    cn=new SqlConnection(SqlString);
                    cn.Open();
                    message="Connection Successful!";
                    this.onSuccess(message);
                    
                }
                catch ( System.Exception e)
                {
                    ServiceController 
                        sc=new ServiceController("MSSQLSERVER",ServerName);
                    try
                    {
                        message="SQL Server Service status on "+ServerName+
                            " is "+sc.Status.ToString();
                    }
                    catch ( System.Exception ex )
                    {
                        message=
                            "Cannot get status of SQL Server 
                            Service!  Exception: "+
                            ex.ToString();
                    }
                    message=message+"\nFailure: "+e.ToString();
                    this.onFailure(message);
                }

            }
        }
    }
}
Previous Page | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 Next Page
RELATED ARTICLES
No Related Articles
TOP 5 ARTICLES
No Top Articles.



MICROSITES
FEATURED TOPIC

ADDITIONAL TOPICS

INFO-LINK