2009-03-30 17 views
4

WCFは、インターフェイスや契約などを使用して、優れたデザインを促進します。たとえば、私の場合、ICustomerMgmtBIZ とIProductMgmtBizのような2つのビジネス機能があります。これら二つはServiceContractsあり、そして私はビジネスレイヤを公開するWCFサービスを構築するにはどうすればよいですか?

IBusinessServiceようなインターフェイスがある場合:IProductMgmtBIZ、ICustomerMgmtBIZ

と実装クラスにBusinessServiceを。私はBusinessServiceクラスの実装が多すぎることがわかります。これまで使用してきた回避策は、部分クラスを実装することです。

WCFサービスは実装が1つで、サービス契約が1つしかありませんか?

答えて

3

いいえ、WCFサービスタイプ(ServiceBehavior属性に帰属するクラス)で複数のサービスコントラクトを実装することは可能です。 Visual Studioテンプレートや他の種類のコードジェネレータを使用している場合、これはすぐには分かりません。しかし、サービスタイプに複数のサービスコントラクトインターフェイスを実装することはできますが、サービスが必要な場合は大したことではありません(この場合はシングルトン(?))、1つのサービスとして動作します。 IBusinessServiceは、すべての操作が同じ論理セッション(ASPX Webセッションと同様)で動作するように、すべての操作が1つのクライアントプロキシから呼び出し可能であることを必要とすることを意味します。そうでない場合は、各契約インターフェースごとに個別のプロキシーを自由に定義することができますが、各契約ごとに1つのエンドポイントもサポートする必要があります。

WCF ServiceHostインスタンスを実装するために必要なのは絶対的な要件ですか?あなたの決定にどのような要因が影響していますか?

ところで、部分クラスはもう私を悩ますことはありません。コードを複数のファイルに分割するというアイデアは、むしろ当然のようです。たとえば、ServiceType_IProductMgmtBiz.csやServiceType_ICustomerMgmtBIZ.csのようなファイルに部分クラスを格納することは、コアロジックをServiceType.csに格納するだけでなく、自然なことです。

最後に、次の質問が役に立つかもしれません... WCF and Interface Inheritance - Is this a terrible thing to do?

1

ぼんやりしていますが、そうではありません。回避策は最適ではなく、 "IBlank"をマスタWCFインターフェイス(IBlankから派生するインターフェイス)として使用する方法と、IProductMgmtBIZとその他のICustomerMgmtBIZを実装する2つのエンドポイントを使用する方法があります。私は私の前に私の開発マシンを持っていない、これはいくつかの他の上書きを含むかもしれません。したがって、WCFレベルでは、2つのWCF ServiceHost(完全に合理的です)が必要な場合を除いて、あなたはうんざりしています。

要するに、回避策は控えめです。同じポート上に異なる拡張子を持つ2つのWCFエンドポイントを持つ方が簡単です。

関連する問題