インポート プロセス中に 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 を使用しているため、すべてが非同期です。