I would say the best way to do this, right now, would be the following (pasted from an older blog of mine):
Most of the time when we want to see new data in a Mashup we use the familiar AutoRefresh widget, set with a interval not too high or low, so it makes the page feel responsive but also not generating lots of traffic.
Also, there are some problems if you trigger services which take some time in order to execute.
This can be mitigated in a simple way, if the architecture allows it, with a simple workaround, involving the use of a DirtyFlag:
Presumption: you have a mashup with a service called Query.... which supplies information for a grid or map.
1. Create a property called DirtyFlag, located anywhere you want
2. Add a GetProperty service which gets the value of the DirtyFlag in the mashup.
3. In your mashup, add a Validator, configure an Input Parameter called "DirtyFlag", and type boolean. In the expression write "DirtyFlag == true". Check the AutoEvaluate checkbox.
4. Set/bind the Validator input parameter value to the value of the DirtyFlag property from the GetProperty service.
5. Bind the Autorefresh event to the GetProperties service.
Explanation: untill now, we make sure that the True event of the validator fires each time when the DirtyFlag property is set to true.
6. Bind the True event of the Validator to the Query type services
7. Create a new service (located anywhere you want) that sets the DirtyFlag property to true. Let's call this service "ResetDirtyFlag"
8. Add the new Service in the mashup
9. Bind the ServiceInvokeCompleted event of the Query service to the ResetDirtyFlag service
10.Done? Not quite yet!
11. Now you must make sure you also set the DirtyFlag property (we still didn't do that yet). Ideally you should do this where you add/update rows to that datatable/stream/infotable etc.
12. Now it's done
So, we have now lots of requests only for small amounts of data (the GetProperties), and only when we see lots of data.