Я справился с этим, сгенерировав класс-оболочку для производного от ClientBase класса во время процесса импорта. Сначала я попытался сгенерировать дополнительный частичный класс с тем же именем, что и у клиентского класса, но это привело к тому, что остальная часть генерации кода перестала работать должным образом.
Итак, мой окончательно сгенерированный код выглядит примерно так:
(генерируется встроенным прокси-генератором WCF):
public interface ServiceReference1
{
IAsyncResult BeginWebMethod1(AsyncCallback callback, object asyncState);
void EndWebMethod1(IAsyncResult result);
IAsyncResult BeginWebMethod2(AsyncCallback callback, object asyncState);
void EndWebMethod2(IAsyncResult result);
// ...
}
public class ServiceReference1Client
{
public event EventHandler<AsyncCompletedEventArgs> WebMethod1Completed;
public event EventHandler<AsyncCompletedEventArgs> WebMethod2Completed;
public void WebMethod1Async() { /* ... */ }
public void WebMethod2Async() { /* ... */ }
// ...
}
(сгенерировано моим заказом IOperationContractGenerationExtension
):
public class ServiceReference1Wrapper
{
private ServiceReference1Client _client;
public ServiceReference1Wrapper(ServiceReference1Client client)
{
_client = client;
}
public IObservable<AsyncCompletedEventArgs> WebMethod1()
{
_client.WebMethod1Async();
// ...
}
public IObservable<AsyncCompletedEventArgs> WebMethod2()
{
_client.WebMethod2Async();
// ...
}
// ...
}
Примечание: я использую Silverlight, поэтому все асинхронно.