ワークフロー サービスの作成スタイル

Windows Workflow Foundation では、Svcutil.exe などのサービス探索ツールを使用してデザイン時に受信したコントラクト情報に基づいて、既存のサービスに接続して情報を交換できます。しかし、Windows Workflow Foundation では、通信ベースのサービスを作成するために特別に設計された新しい Windows Workflow Foundation クラスを使用してサービス コントラクトの定義および実装を生成することもできます。

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

コントラクト優先ワークフロー サービスは、既存のサービス コントラクト情報を使用するワークフローです。コントラクトが使用可能で、ワークフロー サービス プロジェクトに含まれていることを確認する必要があります。このコントラクト情報を作成した後、Windows Workflow Foundation で提供されている ReceiveActivity アクティビティを使用して、特定のサービス コントラクト操作を実装できます。

ワークフロー内のサービスを使用するには SendActivity アクティビティが必要です。また、SendActivity アクティビティには既存のサービス コントラクトが必要です。Windows Workflow Foundation では、サービス コントラクトを作成し、同じプロジェクト内でそのコントラクトを使用するサービスを呼び出すことはできません。

ワークフロー プロジェクト内でのサービス コントラクトの定義

ワークフロー プロジェクト内でサービス コントラクト インターフェイスを定義し、ReceiveActivity アクティビティを使用して、そのコントラクトから操作を実装できます。次の例は、コントラクトに対して ServiceContractAttribute を使用し、そのコントラクトでサポートされている各操作に対して OperationContractAttribute を使用してサービス コントラクトを定義する方法を示しています。

using System;
using System.ServiceModel;

namespace Microsoft.WorkflowServices.Samples
{
    [ServiceContract(Namespace = "http://Microsoft.WorkflowServices.Samples")]
    public interface IContractFirstService
    {
        [OperationContract()]
        string DoWork();
    }
}

ReceiveActivity アクティビティは、上の例のサービス定義を使用して、このコントラクトで定義されている DoWork 操作などを実装できます。また、それぞれの ReceiveActivity アクティビティが 1 つのコントラクトに対して実装できるのは 1 つの操作だけです。

ワークフロー優先ワークフロー サービス

前のセクションでは、コントラクト優先サービスを、既存のサービス コントラクトに 1 つまたは複数の操作を実装するワークフロー サービスとして定義しました。

Windows Workflow Foundation では、Windows Workflow Foundation クラスを使用してプログラムでサービス コントラクトを定義することもできます。しかし、コントラクト優先サービスと同様に、SendActivity アクティビティは、外部サービスと通信するために独自のサービス コントラクトを作成することはできません。この動作は、サービス コントラクトで定義されている操作を実装するために ReceiveActivity アクティビティによって使用されます。

Windows Workflow Foundation の OperationInfo クラスを使用してワークフロー サービスを定義できます。コントラクト情報そのものは ContractName プロパティを使用して定義され、操作名は Name パラメータを使用して設定されます。戻り値を含むパラメータが操作でサポートされている場合は、OperationParameterInfo クラスを使用し、各パラメータを OperationInfo オブジェクトの Parameters コレクションに追加します。

Noteメモ :

戻り値の場合、Name プロパティに値 "(ReturnValue)" を使用し、作成する OperationParameterInfo オブジェクトの Position プロパティに 値 -1 を使用します。

次の例は、OperationInfo および OperationParameterInfo クラスを使用してワークフロー優先ワークフロー サービスを作成する方法を示しています。サービス コントラクトの名前は WorkflowFirstContract で、これには 1 つの操作 DoWork が含まれています。

OperationInfo doWorkOperation = new OperationInfo();
OperationParameterInfo returnValueParameter = new OperationParameterInfo();

doWorkOperation.ContractName = "WorkflowFirstContract";
doWorkOperation.Name = "DoWork";
returnValueParameter.Attributes = ((System.Reflection.ParameterAttributes)((System.Reflection.ParameterAttributes.Out | System.Reflection.ParameterAttributes.Retval)));
returnValueParameter.Name = "(ReturnValue)";
returnValueParameter.ParameterType = typeof(string);
returnValueParameter.Position = -1;
doWorkOperation.Parameters.Add(operationparameterinfo1);

関連項目

参照

ServiceContractAttribute
ReceiveActivity
SendActivity
OperationInfo

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.