コントラクト優先ワークフロー サービスの開発

.NET Framework 4.5 以降の Windows Workflow Foundation (WF) では、コントラクト優先ワークフローの開発という形で、Web サービスとワークフローの統合が向上しています。 コントラクト優先ワークフローの開発ツールでは、コードのコントラクトを先に設計できます。 その後、ツールボックス内に、コントラクト内の操作用のアクティビティ テンプレートが自動的に生成されます。 このトピックでは、ワークフロー サービスのアクティビティおよびプロパティをサービス コントラクトの属性にマップする方法の概要について説明します。 コントラクト優先ワークフロー サービスを作成する手順の例については、「方法: 既存のサービス コントラクトを使用するワークフロー サービスを作成する」を参照してください。

このトピックの内容

ワークフロー属性へのサービス コントラクト属性のマップ

次のセクションにある表では、さまざまな WCF 属性およびプロパティを示し、それらをコントラクト優先ワークフローのメッセージング アクティビティおよびプロパティにマップする方法について説明します。

サービス コントラクト属性

プロパティ名 サポートされています 説明 WF の検証
CallbackContract いいえ コントラクトが双方向コントラクトの場合のコールバック コントラクトの型を取得または設定します。 (なし)
ConfigurationName いいえ アプリケーション構成ファイル内でサービスを検索するために使用される名前を取得または設定します。 (なし)
HasProtectionLevel はい メンバーに保護レベルが割り当てられているかどうかを示す値を取得します。 Receive.ProtectionLevel を null にすることはできません。
名前 はい Web サービス記述言語 (WSDL) での <portType> 要素の名前を取得または設定します。 Receive.ServiceContractName.LocalName が一致している必要があります。
名前空間 はい Web サービス記述言語 (WSDL) での <portType> 要素の名前空間を取得または設定します。 Receive.ServiceContractName.NameSpace が一致している必要があります。
ProtectionLevel はい コントラクトのバインドで、ProtectionLevel プロパティの値をサポートする必要があるかどうかを指定します。 Receive.ProtectionLevel が一致している必要があります。
SessionMode いいえ セッションが許可されるか、許可されないか、または必要であるかを示す値を取得または設定します。 (なし)
TypeId いいえ 派生クラスに実装した場合、この属性の一意の識別子を取得します。 (属性から継承)。 (なし)

ここにサブセクション本文を挿入。

操作コントラクト属性

プロパティ名 サポートされています 説明 WF の検証
アクション はい 要求メッセージの WS-Addressing アクションを取得または設定します。 Receive.Action が一致している必要があります。
AsyncPattern いいえ サービス コントラクト内で Begin<methodName> メソッドと End<methodName> メソッドのペアを使用して、操作が非同期的に実装されることを示します。 (なし)
HasProtectionLevel はい この操作のメッセージの暗号化、署名、または両方が必要かどうかを示す値を取得または設定します。 Receive.ProtectionLevel を null にすることはできません。
IsInitiating いいえ メソッドが (セッションが存在する場合に) サーバー上でセッションを開始できる操作を実装するかどうかを示す値を取得または設定します。 (なし)
IsOneWay はい 操作が応答メッセージを返すかどうかを示す値を取得または設定します。 (この Receive の SendReply またはこの Send の ReceiveReply がありません。)
IsTerminating いいえ 応答メッセージが存在する場合に、そのメッセージの送信後にセッションを終了するようにサービス操作がサーバーに指示するかどうかを示す値を取得または設定します。 (なし)
名前 はい 操作の名前を取得します。値の設定も可能です。 Receive.OperationName が一致している必要があります。
ProtectionLevel はい 操作のメッセージの暗号化、署名、または両方が必要かどうかを示す値を取得または設定します。 Receive.ProtectionLevel が一致している必要があります。
ReplyAction はい 操作の応答メッセージの SOAP アクションの値を取得または設定します。 SendReply.Action が一致している必要があります。
TypeId いいえ 派生クラスに実装した場合、この属性の一意の識別子を取得します。 (属性から継承)。 (なし)

メッセージ コントラクト属性

プロパティ名 サポートされています 説明 WF の検証
HasProtectionLevel はい メッセージに保護レベルが割り当てられているかどうかを示す値を取得します。 検証なし (Receive.Content と SendReply.Content がメッセージ コントラクト型と一致している必要があります)。
IsWrapped はい メッセージ本文にラッパー要素があるかどうかを指定する値を取得または設定します。 検証なし (Receive.Content と Sendreply.Content がメッセージ コントラクト型と一致している必要があります)。
ProtectionLevel いいえ メッセージの暗号化、署名、または両方が必要かどうかを指定する値を取得または設定します。 (なし)
TypeId はい 派生クラスに実装した場合、この属性の一意の識別子を取得します。 (属性から継承)。 検証なし (Receive.Content と SendReply.Content がメッセージ コントラクト型と一致している必要があります)。
WrapperName はい メッセージ本文のラッパー要素の名前を取得または設定します。 検証なし (Receive.Content と SendReply.Content がメッセージ コントラクト型と一致している必要があります)。
WrapperNamespace いいえ メッセージ本文のラッパー要素の名前空間を取得または設定します。 (なし)

データ コントラクト属性

プロパティ名 サポートされています 説明 WF の検証
IsReference いいえ オブジェクト参照データを保持するかどうかを示す値を取得または設定します。 (なし)
名前 はい 型のデータ コントラクトの名前を取得または設定します。 検証なし (Receive.Content と SendReply.Content がメッセージ コントラクト型と一致している必要があります)。
名前空間 はい 型のデータ コントラクトの名前空間を取得または設定します。 検証なし (Receive.Content と SendReply.Content がメッセージ コントラクト型と一致している必要があります)。
TypeId いいえ 派生クラスに実装した場合、この属性の一意の識別子を取得します。 (属性から継承)。 (なし)

エラー コントラクト属性

プロパティ名 サポートされています 説明 WF の検証
アクション はい 操作コントラクトの一部として指定された SOAP エラー メッセージのアクションを取得または設定します。 SendReply.Action が一致している必要があります。
DetailType はい エラー情報を含むシリアル化可能なオブジェクトの型を取得します。 SendReply.Content が型と一致している必要があります。
HasProtectionLevel いいえ SOAP エラー メッセージに保護レベルが割り当てられているかどうかを示す値を取得します。 (なし)
名前 いいえ Web サービス記述言語 (WSDL) でのエラー メッセージの名前を取得または設定します。 (なし)
名前空間 いいえ SOAP エラーの名前空間を取得または設定します。 (なし)
ProtectionLevel いいえ SOAP エラーがバインドに要求する保護レベルを指定します。 (なし)
TypeId いいえ 派生クラスに実装した場合、この属性の一意の識別子を取得します。 (属性から継承)。 (なし)

サポートおよび実装に関する詳細情報

サポートされていないサービス コントラクト機能

  • コントラクトでの TPL (タスク並列ライブラリ) タスクの使用はサポートされていません。

  • サービス コントラクトの継承はサポートされていません。

構成済みのメッセージング アクティビティの生成

コントラクト優先ワークフロー サービスを使用する場合に事前構成されたメッセージ アクティビティの生成をサポートするために、2 つのパブリック静的メソッドが Receive アクティビティと SendReply アクティビティに追加されています。

これらのメソッドによって生成されたアクティビティはコントラクト検証に合格する必要があるため、これらのメソッドは Receive および SendReply の検証ロジックの一部として内部で使用されます。 OperationNameServiceContractNameActionSerializerOptionProtectionLevel、および KnownTypes はすべて、インポートされたコントラクトに一致するよう事前に構成されています。 ワークフロー デザイナーにあるアクティビティのコンテンツ プロパティ ページの [メッセージ] または [パラメーター] セクションも、コントラクトと一致するように事前に構成されています。

WCF エラー コントラクトは、FaultsFaultDescriptionCollection に表示される、エラーごとに構成された個別の構成済み SendReply アクティビティ セットを返すことによって処理されます。

WF サービスで現在サポートされていない、OperationDescription の他の部分 (WebGet や WebInvoke の動作、カスタム操作の動作など) については、API では生成と構成の一環としてそれらの値を無視します。 例外はスローされません。