この記事では、WCFサービスソリューションを2つのプロジェクトに分割することを提案します。1つは契約アセンブリ用で、もう1つは実装アセンブリ用です。
なぜこれが有利なのですか?この分割から何を得ることができますか?ありがとう。
この記事では、WCFサービスソリューションを2つのプロジェクトに分割することを提案します。1つは契約アセンブリ用で、もう1つは実装アセンブリ用です。
なぜこれが有利なのですか?この分割から何を得ることができますか?ありがとう。
明らかな利点は、サービスコントラクトdllファイルをクライアントと共有できることです。クライアントとサーバー間で共通のサービスコントラクトdllを共有すると、クライアントはChannelFactory
クラスでサービスを使用できます。
ChannelFactory<IHelloWorld> channel = new ChannelFactory<IHelloWorld>("tcp");
(クライアントがWCFサービスを利用する2つの異なる方法。(WCFでのChannelFactoryとプロキシの使用)
一般に(特にWCFサービスの場合ではありませんが)、設計の観点からは、インターフェイスを実装から分離することをお勧めします。
ただし、WCFサービスでは、次の点に注意する必要があります。インターフェイスプロジェクトにサービスメソッドで使用されるオブジェクトのインターフェイスが含まれている場合、WCFサービスインターフェイスはインターフェイスプロジェクトの一部ではなく、実装プロジェクトで定義する必要があります。これは、インターフェイスタイプを(相互運用可能な方法で)シリアル化できないため、WCFサービス操作でメソッドシグネチャにインターフェイスタイプを使用しないようにするためです。これらは実装タイプを使用する必要があるため、実装プロジェクトの一部である必要があります。そうしないと、インターフェイスプロジェクトから実装プロジェクトに参照を追加する必要があります。それは貧弱な設計であり、実装からのインターフェースの分離を役に立たなくします。