Я получил вокруг этого генерируя обертку за класс для класса, созданного 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, поэтому все асинхронно.
IOperationContextGenerationExtension действительно является точкой расширения на стороне сервера для WCF. Что вы хотите достичь? Просто добавьте несколько методов в прокси-класс? См. Мой ответ. Что-то еще? –
Я не думаю, что это точно сказать, что IOperationContextGenerationExtension является серверной. Он подключается к процессу импорта и, следовательно, является клиентской (по отношению к веб-службе). По крайней мере, так я его и использую. – dcstraw