280 likes | 600 Views
Scalable Development, Inc. Building systems today that perform tomorrow. Designing & Building Windows Services with VB.NET. Wallace B. McClure Scalable Development, Inc. .NET Experiences. PDC 2000 Build (July 2000). Visual Studio 1.0 Beta 1 (November 2000). Book began (January 2001).
E N D
Scalable Development, Inc. Building systems today that perform tomorrow. Designing & BuildingWindows Serviceswith VB.NET • Wallace B. McClure • Scalable Development, Inc.
.NET Experiences • PDC 2000 Build (July 2000). • Visual Studio 1.0 Beta 1 (November 2000). • Book began (January 2001). • Visual Studio 1.0 Beta 2 (June 2001). • First Production ASP.NET App (July 2001). • Production Windows Service (November 2001). Runs today. • 4 Production Applications by shipment. • Multiple running applications.
.NET Resources • ASP.NET – www.asp.net • AspAdvice – www.aspadvice.com • Windows Forms – www.windowsforms.net • Architecture – msdn.microsoft.com/architecture • .NET News – www.dotnetwire.com
What are Windows Services? • Applications (Database, Web Server, …). • Good for long running / complicated operations. • Run all the time. • No User Interface. • Run within their own security context. • Limited access to local resources. • Limited access to remote resources. • Debugging. • Non-interactive.
Design Guidelines • Consistency. • No popup messages. • Information/Errors need to be written to somewhere. • EventLog. • Database. • Be careful blocking.
Types of .NET Applications • ASP.NET. • Web Services. • WinForms. • Components. • Windows Services. • Others.
.NET Support for Services • System.ServiceProcess namespace. • Inherit from the ServiceBase Class. • Installation. • ServiceController Class Allows communication from authorized user (WinForms, ASP.NET, or other) to a Service (thru SCM).
Languages Support • C++ (Managed & Unmanaged). • Visual Basic. • C#. • Other .NET Languages.
Parts of a .NET Windows Service • Service Control Manager (SCM). • System.ServiceProcess.ServiceBase class • Events. • Installation. • Process Installation. • Service Installation.
Events in ServiceBase • OnStart(). • OnStop(). • OnPause(). • OnContinue(). • OnShutdown(). • OnPowerEvent(). • OnCustomCommand().
OnStart() Event • Called when the Service is issued the start command. • VB Syntax:Protected Overridable Sub OnStart ( _ByVal args() as String ) • Hard to Debug By Default.
Debugging the OnStart() Event • Create a dummy service that is a part of your process. • Start the dummy service to start the process. • Attach to running process. • Place breakpoint. • Start “real” service.
OnStop() Event • Called when the Service is issued the stop command. • Protected Overridable Sub OnStop().
OnPause() Event • Called when the Service is issued the pause command. • Protected Overrideable Sub OnPause().
OnContinue() Event • Called when the Service is issued the continue command. • Protected Overrideable Sub OnContinue().
OnShutdown() Event • Called when the System sends the shutdown command to all Applications specifying that a system shutdown is inprogress. • Similar to the OnStop() event. • Protected Overrideable Sub OnShutdown().
OnPowerEvent() Event • Called when the computer’s power status has changed. Typically, this applies to a laptop computer when it goes into a suspended state. • Not the same as a system shutdown. • Protected Overrideable Function OnPowerEvent( ByVal powerStatus as PowerBroadcastStatus ) as Boolean • Boolean return value is a response to a QuerySuspend broadcast. • True = Application is in a state where a suspend is ok. False = suspend is not ok. • PowerBroadcastStatus is an enumertion with 9 values.
OnCustomCommand() Event • Executed when a custom command is passed from the SCM to the service. • Protected Overridable Sub OnCustomCommand( ByVal command as Integer ) • Command values between 128 & 255.
Security Context • Service runs within a defined security context (UserId/PassWord). • What you do not necessarilyhave access to: • Desktop. • Remote Resources. • Mapped Drives. • What you do have access to: • Local FileSystem. • Network Protocols (TCP/IP, …). • Database (ODBC, OleDb, MP).
Custom Commands /ServiceController • Use the ServiceController class. • ExecuteCommand( ByVal command as Integer ) method. • Start, Stop, Pause, Continue. • MachineName, ServiceName, Status properties.
Installation • Each executable must have a process installer. • Each service within a process must have a service installer. • Command line utility (installutil.exe)
App.Config • XML Format. • Excellent for read only information.
Great, Now What canYou do with a Service? • Listen for events to occur. • Network requests. • Timer countdown. • Messages arriving in a message queue. • File system changes. • Other.
Example • Timer. • When the Timer counts down to zero, an event fires and our application performs an operation. • No continual polling occurs, no blocking, and no extra processing occurs on the system.
What’s Not to Like? • Requires the .NET Framework. • If a framework exception occurs when the framework stops, the Windows Service stops…….and there is nothing within the framework to restart that Windows Service. • Problem is rare, but possible. (ODP.NET 9.2.0.2.100.0 users, problem has been resolved)
Monitoring a Windows Service • Need something that won’t stop. • Can do it with .NET and a Console application. • Drop back to COM/API. • Use WMI & “Scheduled Tasks.” • Use ServiceController class. • Run every few days/hours/minutes to monitor the status of your Service.
Things to look at / Last Thoughts • Event Processing vs. Blocking. • EventLog. • Multiple Threads of Execution. • Weak References. • Performance Monitor Integration. • Nothing wrong with Interop.
Questions? Scalable Development, Inc. Building systems today that perform tomorrow. • Scalable Development, Inc. • Consulting & Development Services. • http://www.scalabledevelopment.com • 865-693-3004. • wallym@scalabledevelopment.com END