This throttling makes sense given that the service just pushes the SendStringMessage parameters onto another queue (delegate_->SendStringMessage). It is unfortunate complexity indeed.
The MessagePipe is already a queue. If you could arrange for the service impl to not read messages from the pipe faster than it can fully process them, then the client would not need to worry about throttling messages at all. It would be nicer if the service impl could protect itself somehow instead.
We've talked about adding Suspend/Resume methods on mojo::Binding that service code could use to suspend further reads from the pipe, but it hasn't been implemented yet. Maybe now is the time.
-Darin