I have the beginnings of my first Silverlight MVVM app and need to know where I should put business logic including async service calls. Does it go on the page hosting the view? Do I simply set a property of the ViewModel which updates the view?
I would tend to agree that a service call that would result in a data modification should be handled by the viewmodel.
Doing MVVM in Silverlight is harder than in WPF, but we've done it. Yes, we put the async service call in the ViewModel. The "Model" in our case are the proxy objects that get sent back and forth over the web service call. Unfortunately, this means some of your functionality is in your client ViewModel, and some is on the server side. There's really no way to get around this.
...and yes, have the Async Complete event handler write into a property on the ViewModel, and make sure that property (or collection) implements INotifyPropertyChanged (or INotifyCollectionChanged). If you're getting "model" objects back from the web service, and those objects don't implement INotifyPropertyChanged themselves, then you should consider a wrapper ViewModel object around those too. That way if you have a View for each of those objects, they can do Two-Way binding.
I put my calls to async services in the model and hook into events from my viewmodel that get fired when the data is returned to the model.
You have a good example from Microsoft here. This has helping me a lot to understand MVVM and ASYNC calls.