What are common Windows service design patterns?

design-patterns, windows, windows-services

Solution

A Windows service is merely a background process that is not tied to an interactive desktop (although it can optionally communicate with one). The uses for such a concept are many and varied. Common uses for a service (not mutually exclusive):

- Listen for an incoming request from somewhere else (e.g. TCP, RPC, COM, HTTP) and act on it.

- Schedule a task to occur at a certain time, at regular intervals, or when some other condition becomes true, e.g. watching the file system.

The only pattern I can think of that you should apply to all your services is: Separate out the part that decides when to do the work from the part that does the work. This will make it easier to unit test and re-use the various parts.

Problem

Where can I find good information on common design patterns that might be employed when building a new Windows service? **Update: I'm asking if there are common designs that are used when constructing a service.* For example: I have seen a single task get executed on a timer (this seems very common when constructing a service). I've also seen 'queue workers' deployed as services. Are there other common design patterns when designing software to be run as a service?

Original source