Я бы не согласился с Марком: есть подлинные случаи, когда вам нужно выполнять синхронные вызовы веб-службы. Однако вам, вероятно, следует избегать блокирования потока пользовательского интерфейса, поскольку это создает очень плохой пользовательский интерфейс.
Очень простой способ синхронного осуществления служебного вызова - это использование ManualResetEvent.
ManualResetEvent m_svcMRE = new ManualResetEvent(false);
MyServiceClient m_svcProxy = new MyServiceClient(binding, address);
m_svcProxy.DoSomethingCompleted += (sender, args) => { m_svcMRE.Set(); };
public void DoSomething()
{
m_svcMRE.Reset();
m_svcProxy.DoSomething();
m_svcMRE.WaitOne();
}