Just a few things you could try out.
What type of authentication is applied to the service call. If the service etc. authenticates against an AD, you should ensure that only the first call is authenticated and the rest of the calls just piggybacks on that. An AD authentication can take substantial amount of time (0.3 - 1.0 s)
Try installing Fiddler and use it as a WCF proxy. Fiddler will give you the means to break down the time being spent in various parts of the execution of the service call.
Have you tried to ping the server you target - are the ping timings acceptable?.
How much time is being spent on the first invocation, compared to the following calls. The first call is always going to take a significant amount of time as the CLR runtime have to generate a boat load of dynamic XML code. Just generating the XmlSerializer JIT code is costly, as it dynamically generates C# code, kicks of the CSC compiler and load the generated DLL. You might have a look at the SGEN tool, which makes it possible to generate the XmlSerializer DLL's at compile time and instead of runtime (note this will only help on the first execution timings)
I can't see how much time is actually being spent on the server side, inside the execution of the doSomething(), so it's difficult to see how much time is actually being spent on the network. Faulty network hardware, cables, switches as well as firewalls, routing tables, SLA's etc. might have a negative impact on what performance you can get out of this.
Of cause as already mentioned, having such a chatty interface as you have to use, is far from optimal and the service owner might run into all sorts of server side performance problems, if this is their normal way of exposing interfaces - but that is another story :)