SOA architecture question

Posted on 2011-04-25
Last Modified: 2012-05-11
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.
Question by:GLlano
    LVL 22

    Accepted Solution

    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).
    LVL 3

    Expert Comment

    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.

    Featured Post

    How to run any project with ease

    Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
    - Combine task lists, docs, spreadsheets, and chat in one
    - View and edit from mobile/offline
    - Cut down on emails

    Join & Write a Comment

    More often than not, we developers are confronted with a need: a need to make some kind of magic happen via code. Whether it is for a client, for the boss, or for our own personal projects, the need must be satisfied. Most of the time, the Framework…
    User Beware!  This is a rather permanent solution to removing your email from an exchange server.  The only way to truly go back is to have your exchange administrator restore your mailbox from backups.  This is usually the option of last resort.  A…
    Viewers will learn how to maximize accessibility options in an Excel workbook for users with accessibility issues.
    The viewer will learn how to simulate a series of sales calls dependent on a single skill level and learn how to simulate a series of sales calls dependent on two skill levels. Simulating Independent Sales Calls: Enter .75 into cell C2 – “skill leve…

    754 members asked questions and received personalized solutions in the past 7 days.

    Join the community of 500,000 technology professionals and ask your questions.

    Join & Ask a Question

    Need Help in Real-Time?

    Connect with top rated Experts

    20 Experts available now in Live!

    Get 1:1 Help Now