Channel Factory をいつ使用し、WCF で Service Proxy を使用するのはいつですか?
私のバインディングは NetNamedPipeBinding です。Duplex接続を使用する予定です。
Channel Factory をいつ使用し、WCF で Service Proxy を使用するのはいつですか?
私のバインディングは NetNamedPipeBinding です。Duplex接続を使用する予定です。
いつプロキシを使用しますか?
svcutil.exe を使用してプロキシを作成します。このツールの出力は、プロキシ クラスを提供し、アプリケーション構成ファイルに対応する変更を加えます。複数のアプリケーションで使用されることがわかっているサービスや、複数の場所で使用できる十分な汎用性があるサービスがある場合は、生成されたプロキシ クラスを引き続き使用することをお勧めします。WCF でプロキシを使用して、サービス コントラクトとエンティティをクライアントと共有できるようにします。プロキシには、 get および sets が必要である、コンストラクターを公開できない、サービス コントラクト以外のメソッドを公開できない、コードの繰り返し、サービス コントラクト/データ コントラクト/メッセージ コントラクトを追加/変更するたびに、いくつかの制限があります。クライアントのプロキシを再生成する必要があります。
ChannelFactory を使用する場合
もう 1 つのオプションは、 ChannelFactory クラスを使用して、プロキシを必要とせずにクライアントとサービスの間のチャネルを構築することです。場合によっては、サービスがクライアント アプリケーションに密接にバインドされていることがあります。このような場合、Interface DLL を直接参照し、それを使用して ChannelFactory を使用してメソッドを呼び出すことが理にかなっています。ChannelFactory ルートの大きな利点の 1 つは、svcutil.exe を使用した場合には利用できないメソッドにアクセスできることです。
ChannelFactory と Proxy クラスをいつ使用するか?
DLL は、クライアント コードが制御下にあり、サービス コントラクト以外のものをクライアントと共有したい場合に役立ちます。たとえば、エンティティに関連付けられたユーティリティ メソッドなどをクライアントと共有し、クライアントとサービス コードをより緊密に結び付けます。エンティティがあまり変わらず、クライアント コードが少ないことがわかっている場合は、プロキシよりも DLL の方がうまく機能します。サービスのクライアントが API などのシステムの外部にある場合は、DLL ではなくコード ファイルを提供することでコントラクトの共有が容易になるため、プロキシを使用することは理にかなっています。
NetNamedPipeBinding の場合
次の 2 つの理由から、ChannelFactory を使用することをお勧めします。
Channel Factory と Service Proxy は、サービスを消費するという 1 つの目的を達成するための同等の機能です。通常、クライアントとサーバーの両方でサービス コントラクト インターフェイスを制御する場合は、より簡単に管理できる ChannelFactory を使用することをお勧めします。クライアント部分のみを管理する場合は、サーバー側で行われた変更を制御できないため、プロキシを使用することをお勧めします。さらに、Proxy は、サービスの非同期メソッドを生成する優れたツールを提供します:)