0

タイプ (foo) を返す関数を持つ Web サービスがあります。2.0 で生成されたプロキシを介して .NET でこの Web サービスを使用すると、生成されたプロキシに foo というクラスが作成されます。Web サービスで使用されている DLL であるそのクラス (foo) を含む DLL がある場合、カスタム プロキシ クラスを作成する代わりにそのクラスを使用する方法はありますか? リモーティングに似たものを探していますが、リモーティングではありません。

4

3 に答える 3

0

私はこれを行う3つの方法を見てきました:

  1. Visual Studio でプロキシを生成し、プロキシ内のクラスを手動で dll の完全なクラス名に変更します。動作しますが、プロキシを更新するたびにこれをやり直す必要があります。それに、すごく汚いですよね?
  2. リフレクションによってプロキシ オブジェクトのディープ コピーを「実際の」オブジェクトに作成するジェネリック クラス/メソッドを使用します。機能しますが、もちろん、トレードオフのパフォーマンスが少しあります
  3. コード生成によってプロキシを作成する代わりに、データ コントラクト (データ クラス) で dll を参照し、それらを使用できる WCF を使用します。
于 2010-07-06T15:05:35.267 に答える
0

ここでの重要な問題は、プロキシの生成にあると思います。私は通常、Web サービスに対して 2 つの異なるアプローチを使用してきました。

1) メソッドを公開し、クライアントが Visual Studio でプロキシを生成してメソッドを使用する従来のサービス。
2) 公開された「サービス」がよりパススルーであり、実行される「アクション」がサービスとの間で送受信されるオブジェクトにカプセル化される要求/応答サービス。これらのアクションは、サーバーとクライアントの両方が持つ共有ライブラリにあります。

前者では、この同じ問題に遭遇することがよくありますが、解決策があるとは本当に思いません。少なくとも、Visual Studio が気に入るものはまったくありません。生成されたプロキシを手動で変更して他のクラスを使用することもできますが、再生成するたびにその手順を繰り返す必要があります。逆に、Visual Studio の外部でCodeSmith (古いバージョンは無料ですが、.NET 1.1 に依存します) などで生成できます。これには、プロキシ用のテンプレートを作成し、IDE の外に出て再生成するための作業が必要になります。それらを更新する必要があるときはいつでも。

ただし、後者に適したツールをお勧めできます。それはAgathaプロジェクトです。実行中の「アクション」から「サービス」を分離するアプローチを採用し、共有ライブラリーのアプローチを非常に簡単にします。このような再アーキテクチャは、スケジュールによっては、現在取り組んでいるプロジェクトでは問題外かもしれませんが、将来のプロジェクトで検討すべきことは間違いありません。

于 2010-06-24T17:42:38.043 に答える
0

独自のプロキシ クラスを作成するか、生成された Foo クラスのインスタンスを取得し、必要に応じてデータをコピーするコンストラクターを Foo クラスに実装することができます。

于 2010-06-24T17:43:31.020 に答える