1. ホーム
  2. wcf

[解決済み] WCF ChannelFactoryとプロキシ生成の比較

2023-06-12 02:23:59

質問

ChannelFactoryを使用して呼び出すことができるとき、どのような状況でWCFサービスからプロキシを生成することを好むのでしょうか?

この方法では、プロキシを生成する必要がなく、サーバが更新されたときにプロキシを再生成することを心配する必要はないでしょうか?

ありがとうございます。

どのように解決するのですか?

WCFクライアントを作成するには、3つの基本的な方法があります。

  1. Visual Studioにプロキシを生成させる。これは、WSDLを読み込んでサービスに接続するコードを自動生成します。何らかの理由でサービスが変更された場合は、それを再生成する必要があります。この大きな利点は、セットアップが簡単なことです。VSにはウィザードがあり、すべて自動で行われます。デメリットは、VSにすべてのハードワークを任せることになるため、コントロールが効かなくなることです。

  2. 使用方法 ChannelFactory を既知のインターフェイスで使用します。これは、サービス(サービスコントラクト)を記述するローカルなインターフェイスを持っていることに依存しています。大きな利点は、変更をより簡単に管理できることです。変更を再コンパイルして修正する必要はありますが、コードを再生成するのではなく、新しいインターフェイスを参照することになります。一般に、この方法はサーバーとクライアントの両方を制御する場合に使われます。しかし、インターフェースはどんなサービスにも書くことができ、RESTのものでさえも書くことができます。 このTwitter API .

  3. 独自のプロキシを書く - これはかなり簡単で、特に REST サービスでは HttpClient または WebClient . これは最も細かい制御を可能にしますが、その代償として多くのサービスAPIが文字列で提供されることになります。例えば var content = new HttpClient().Get("http://yoursite.com/resource/id").Content; - のように、APIの詳細が変更されても、実行時までエラーになることはないでしょう。

個人的に、私はオプション 1 が好きではありません。自動生成されたコードに依存するのは面倒で、あまりにも多くの制御を失います。さらに、それはしばしばシリアライゼーションの問題を引き起こします。私は 2 つの同じクラス (サーバー コードと自動生成されたクラス) を持つことになりますが、これは整理することは可能ですが、苦痛です。

オプション 2 は完璧ですが、チャンネルは少し制限されすぎています。 HTTP エラーのコンテンツを完全に失い . とはいえ、サービスを記述するインターフェースを持つことは、コーディングやメンテナンスがずっと簡単になります。