Join 34,000+ subscribers and receive articles from our blog about software quality, testing, QA and security.

Multiple Windows Service Apps at Once



I have been a longtime user of CodeSite and have only recently run into a situation where the Dispatcher model seems to fail when there are multiple multi-threaded windows services running and sending messages to the same dispatcher.

I want to evaluate SmartInspect but before I refactor all the CodeSite calls to SmartInspect calls, I’d like to know:

  1. Is it possible to have multiple apps post messages to the same Viewer?
  2. Is the Viewer able to “ignore” messages from specified Apps (via categories or some other feature) without being burdened with processing the full TCP process?

After browsing this forum, the message load of all the clients combined does not appear to to even come close to the “thousands per second” cited in a previous post.

I look forward to your response.


Hello Paul,

Thank you for your interest in SmartInspect.

  1. Yes, this is possible. The SmartInspect Console (the viewer) supports receiving messages from multiple clients at the same time. The Console was explicitly designed to perform well even with multiple TCP clients.

  2. I’m not sure if I understood your question correctly, but I try to summarize how the SmartInspect Console works with TCP clients. When a TCP client sends a message to the Console, the Console reads the entire message and then sends an “OK” packet back to the client. The client waits until the “OK” packet is received. It is thereby important to note that the TCP listener part in the Console is decoupled from the actual displaying and filtering of messages. This means that the Console sends the “OK” answer immediately after receiving the packet from the client and the client thus does not need to wait until the contents of the packet are extracted and eventually displayed.

For filtering messages, you have several options in the SmartInspect concept. Seen from a high-level perspective, filtering can be done on the client-side (with the libraries) or directly in the Console. Filtering on the client-side can be achieved with log levels, sessions (these are similar to CodeSite categories with the difference that multiple sessions can share the same logging connection, I think this isn’t possible with CodeSite) or custom filtering via a Filter event.

Filtering in the Console on the other hand is achieved by creating so called “views” (these are the tabs in the middle of the Console) and configuring them to show those parts of the log you are interested in. For example, to show the log messages of a certain application only, you could create a new view whose application filter is set to the name of your application. You can even tell the Console to create new views automatically based on certain criteria. This feature is called AutoViews and may be used, for example, to let the Console create a new view for each thread of your multi-threaded services.

I hope this answers your questions. Please let me know if there’s anything else I can assist you with.


Thanks! That was helpful. I am evaluating SmartInspect now.


Great. Please let me know if you have any questions during your evaluation period. We are always happy to help.


Is it also possible to write to a single file from multiple processes without having the console as a sink?


Hello Thomy,

Currently not. There’s a simple SmartInspect server (called SmartInspect Receiver) which can receive log data via TCP but it creates a new log file for each connected client. The Receiver can be downloaded from our tools section:

The download comes with the full Delphi source code, so you could modify the Receiver to write the data to a single log file instead. We are happy to help in case you want to do this.