WCF コンポーネントのモデリング

サービス・コントラクト、メッセージ・コントラクト、およびデータ・コントラクトなどの Windows® Communication Foundation (WCF) コンポーネントのモデルを作成できます。
このタスクについて
UML で WCF コンポーネントを設計するとき、各コンポーネントの以下の記述を考慮してください。

サービス・コントラクト

サービス・コントラクトは、サービスのシグニチャー、交換されるデータ、および他の規約上必要なデータを指定します。サービスは、操作のグループです。サービス・コントラクトを作成するには、操作をモデル化し、それらのグループを指定する必要があります。WCF アプリケーションのモデルでは、最初にインターフェースをモデル化し、«ServiceContract» ステレオタイプを適用して、サービス・コントラクトを作成します。次に、UML 操作を作成し、C# メソッドとしてステレオタイプ化し、«OperationContract» ステレオタイプを適用して、操作を定義します。

«OperationContract» ステレオタイプを持たない操作はサービス操作ではなく、コード生成後に、WCF サービスのクライアントが使用するためには公開されません。それらは、宣言されたアクセス範囲内のオブジェクトによってのみ呼び出すことができます。

メッセージ・コントラクト

SOAP メッセージのスキーマ生成をサポートするのに使用されます。 一般的には、カスタムの SOAP ヘッダーを含むメッセージを定義する場合、または複数のデータ・コントラクトのタイプからメッセージを構成する場所で、メッセージ・コントラクトを使用します。

SOAP スキーマがデータ・コントラクト・シリアライザーによって生成されるときには、特定の規則に従う必要があります。例えば、WS-I Basic Profile に準拠したサービスでの SOAP 本体の要素には、1 つの子要素のみを含めることができます。多くの場合、データ・コントラクト・シリアライザーのデフォルトの動作を使用する代わりに、スキーマを制御しなければならない可能性があります。ここで MessageContract 属性が関係してきます。

MessageContract 属性は、メッセージ・ヘッダーまたはボディに追加されるデータ・タイプまたはコントラクトを定義するクラスで使用されます。以下のコード・サンプルは、FindEmployeeRequest という名前のメッセージ・コントラクト・クラスに含まれている SearchCriteria という名前のデータ・コントラクト・クラスを示しています。

データ・コントラクト

データ・コントラクトは、サービスとクライアントの間の正式な取り決めであり、交換されるデータが抽象的に記述されています。つまり、クライアントとサービスが通信するために必要なのは同じデータ・コントラクトだけで、同じタイプを共有する必要はありません。データ・コントラクトは、パラメーターまたは戻り値の型ごとに、交換するためにシリアライズする (XML に変換する) 必要があるデータを正確に定義します。

データ・コントラクトの基本

Windows Communication Foundation (WCF) は、データ・コントラクト・シリアライザーと呼ばれるシリアライゼーション・エンジンをデフォルトで使用して、データのシリアライズおよびデシリアライズ (データと XML 間の変換) を実行します。すべての .NET Framework プリミティブ型 (整数および文字列など) およびプリミティブ型として扱われる特定の型 (DateTime および XmlElement など) は、他に準備なしでシリアライズできるため、デフォルトのデータ・コントラクトを持つと見なされます。多くの .NET Framework データ型もまた、既存のデータ・コントラクトを持ちます。シリアライズできるすべての型の一覧については、『データ コントラクト シリアライザでサポートされる型』を参照してください。

新しい複合型を作成したら、シリアライズできるように、データ・コントラクトを定義する必要があります。デフォルトでは、DataContractSerializer はデータ・コントラクトを推測し、公開されている型をすべてシリアライズします。その型の読み取り/書き込み可能なパブリック・プロパティーおよびパブリック・フィールドは、すべてシリアライズされます。IgnoreDataMemberAttribute を使用することにより、メンバーがシリアライズされないようにすることができます。また、DataContractAttribute 属性および DataMemberAttribute 属性を使用して、データ・コントラクトを明示的に作成することもできます。これを行うには、通常、その型に DataContractAttribute 属性を適用します。この属性は、クラス、構造体、および列挙型に適用できます。次に、データ・コントラクト型の各メンバーに DataMemberAttribute 属性を適用して、それがデータ・メンバーであること、つまり、シリアライズする必要があることを示す必要があります。詳細情報については、『シリアル化可能な型』を参照してください。


フィードバック