0

WCF クライアント プロキシ コード (つまり、 から派生する生成クラス) のサービス操作ごとに 1 つのメソッドを追加したいと考えていますClientBase。実装を持つ Visual Studio 拡張機能を作成しましたが、このインターフェイスは、派生クラスIOperationContractGenerationExtensionではなく、サービス インターフェイスを変更する機能のみを公開しているようです。ClientBase

プロキシ クライアント クラスで新しいメソッドを生成する方法はありますか?

4

2 に答える 2

2

私の知る限り、これらのクラスは常に部分クラスです。

public partial class MyWCFServiceClient : ClientBase<IMyWCFService>, IMyWCFService 
{
  ...
}

同じ部分クラスにメソッドを追加する独自の 2 番目のファイルで簡単に拡張できます。

YourOwnFile.cs

public partial class MyWCFServiceClient 
{
   public void NewMethod1()
   {
   }

   public void NewMethod2()
   {
   }
}
于 2010-05-28T17:17:58.133 に答える
0

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

于 2010-06-01T16:38:04.963 に答える