SOA architecture question

Hello,  I'm looking for some direction on creating an SOA archetictual design for a software product we deliver to our customers.  I'm new to the SOA approach, so please bare with me.  I need to gather information on our users on what version of the product they are using and how they are using our application (ex. size of the database, version, # of users etc.).  All this information is stored on an SQL Express database we install on their system.  When they log into the desktop application, we want to send information to a web service we have hosted and store that information on a sql server database we have in-house.  Our customer service staff will query this information from an intranet site to see the clients informaiton.  We're trying to give our CS staff a heads on our clients information.  
    What I'm struggling with is, I'm not sure what to load on the clients machine to gather this information.  Do I create a windows service or a web service that installs on their machine?  When the application sends information to this service, it needs to follow the approach of "fire and forget about it".  If it fails for some reason, I don't want it to disrupt the user from their daily tasks.  
    Can you please give me your experience with a similar solution and any links you might recommend to read.
Who is Participating?
ambienceConnect With a Mentor Commented:
You havent given enough information to give a worthwhile answer, however

>>  All this information is stored on an SQL Express database we install on their system.

At installation time? I suppose whenever some of your products is used, it updates the database, right?

>> I'm not sure what to load on the clients machine to gather this information.

I'm not sure I understand the intent here, but it would make sense to add that capability to the products themselves. For example Eclipse IDE fetches usage stats when its started and pops up a dialog for user confirmation. Unless, the user has given consent to do it transparently, it is better to let the user see whats happening. If such an approach is possible then I would definitely vote for it, because installing services to gather usage stats is probably a misuse (subjective comment). I hate google, adobe, apple and real networks for they install update/speed launch services without even bothering to ask.

Note that updating the products may not be that difficult as it seems, because you can create a tool that gathers info and for the interception just replace the launch shortcuts with that tool passing it the command line that it uses to launch the real target - just the installer has to change.

Creating a service is also plausible, but again you'll have almost the same amount of work to do. Usage stats are dependent upon the actual use and therefore it would be worthwhile to detect when the database has changed.


From an SOA perspective, I think both the tool and service based approaches would be almost the same, because sharing a database is against SOA - the partitioning has to include data as well. I say this because SOA is an architecture approach and you can apply that to all layer/levels. Ideally, either each product save data in their own db and expose a service interface for querying that information or there should be a service for usage monitoring with its own database exposing a servivce interface for products to submit stats as well as query.

Since all of that has to happen on the local machine, it does not make sense to install a webservice.

I would also like to mention the possibility of using a message bus and implement a publisher subscriber like architecture whereby products can publish usage stats as messages and the subscriber would upload to a remote webservice. In such a case, the db would effectively be the bus.

The subscriber (the component that uploads data) could still be a windows service or a tool launch for every product launch (or as a scheduled task).
You are on the right track with your approach.

Expose a webservice at your end. Configure your desktop application that would be installed on the client machines to send a feed to this service. Then you can do all you want within the webservice method to get the data to your CS staff.
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.