I need some direction on how to achieve our goal.

We have an application that will be deployed on hundreds and potentially just over a thousand computers that are not on the same network. This application already automatically updates itself by calling our webservice and checking for a newer version so it "calls home" to an extent at this time.

The goals of this application have evolved (go figure) and now management would like to be able to "ask" this application to perform certain functions on each computer. At the moment, this is as simple as asking for the currently logged in user account.

What they would like is to right click on a computer from their management interface and select "show current user". The application on the computer would then respond with this information.

So, the question is how to make the workstation application stay in touch frequently enough to give management the information they want without waiting very long yet also not overload bandwidth with unnecessary traffic.

Should I have the application just constantly call a webservice every X number of seconds and see if there is any "work" to do? Or, should I somehow keep a connection open? Or some other technique?

Thanks for any advice!