4

私が働いている会社では、3つのチームが異なるプロジェクトに取り組んでいます。これらのプロジェクト間でWebサービスを利用する場合、「サービス参照の追加」を使用するか、契約をアセンブリとして共有してChannelFactoryを使用するかというジレンマがあります。あれを呼べ ?推奨される解決策またはこれ以外のより良い解決策はありますか?

4

2 に答える 2

3

ソフトウェア開発に関するほとんどの質問のように、それは異なります:)。

サービスがコア/ビジネスロジックを維持するものであり、クライアントがサービスのUIを作成するように構築されている場合、クライアントの目的は何らかのサービスに結合されるため、クライアントとサービスを結合する問題は発生しません。

これが当てはまらず、クライアントの目的が広く、サービスの利用が、これらの要因を考慮して、私が考えるよりも機能のほんの一部である場合:-共有契約の場合、変更/再生成する必要はありません双方が同じタイプを使用しているため、自動的に伝播されるため、コントラクトが変更された場合のクライアント。これにはもう1つの利点があります。つまり、サービス側で何かが変更された場合(メッセージフィールドが削除/名前変更された場合)、クライアントのビルドが自動的に中断され、通常は全体をより速く修正できます。それ以外の場合は、最初の呼び出し(またはシステムテスト)を待って、サービスが変更され、問題がないことを通知する必要があります(サービス参照の追加アプローチを使用すると、これを実現する方法もあります)。

状況によっては、新しいバージョンのサービスコントラクトがクライアントコードに影響を与えたくない場合や、クライアントが独立して動作(構築)したい場合があります。その場合、クライアントを生成する方が良いアプローチです。

基本的に問題の答えは、クライアントとサービスが別々に開発されているか、同じプロジェクト/アプリケーションの一部であるかです。

はい、どちらの状況でもChannelFactoryを使用できます

于 2012-09-17T21:57:27.980 に答える
2

コントラクトをアセンブリとして共有するのではなく、サービス参照を追加してクライアントプロキシを生成することをお勧めします。これにより、サービスとクライアント間の結合が弱くなります。どちらの場合も、を使用しChannelFactory<T>てサービスを呼び出すことができます。最初のケースでTはによって生成さsvcutil.exeれ、2番目のケースでは共有アセンブリから生成されます。

于 2012-09-17T20:16:36.503 に答える