ReceiveActivity アクティビティの使用

ReceiveActivity アクティビティは、ワークフロー内にサービス コントラクト操作を実装するようにデザインされています。サービス コントラクトが指定されている場合、ReceiveActivity アクティビティは、クライアントがサービスに接続し、その子アクティビティを実行するまで待機します。

ReceiveActivity アクティビティは、Windows Communication Foundation (WCF) を使用して定義済みのサービス コントラクト操作を実装する (コントラクト優先) か、または Windows Workflow Foundation クラス を使用してサービス コントラクトをビルドする (ワークフロー優先) ことができます。別のワークフロー サービスの作成スタイルの詳細については、「ワークフロー サービスの作成スタイル」を参照してください。

ReceiveActivity アクティビティを使用したサービス コントラクトの実装

ReceiveActivity アクティビティは、その実行がスケジュールされていると、サービス エンドポイントのクライアントからの受信接続をリッスンします。ReceiveActivity アクティビティは、サービス コントラクトで定義されている 1 つの操作のみを実装します。操作は、TypedOperationInfo オブジェクトを使用して、ReceiveActivity アクティビティに関連付けられます。TypedOperationInfo クラスは、ContractType に関する情報、操作の名前、およびクライアントが操作を正常に実行するのに必要な ID 情報で構成されています。ReceiveActivity アクティビティを作成し、TypedOperationInfo オブジェクトを関連付け、サービス コントラクトで定義された操作を実装する方法を次の例に示します。サービス コントラクトは、前のセクションのコントラクトと同じです。

this.doWorkReceiveActivity = new ReceiveActivity();
TypedOperationInfo doWorkOperationInfo = new TypedOperationInfo();

this.doWorkReceiveActivity.CanCreateInstance = true;
this.doWorkReceiveActivity.Name = "doWorkReceiveActivity";
doWorkOperationInfo.ContractType = typeof(Microsoft.WorkflowServices.Samples.IContractFirstService);
doWorkOperationInfo.Name = "DoWork";
doWorkOperationInfo.PrincipalPermissionRole = "";
this.doWorkReceiveActivity.ServiceOperationInfo = doWorkOperationInfo;

操作は、任意の数のパラメータと戻り値をサポートできます。このサポートを実現するために、ReceiveActivity アクティビティは、ParameterBindings プロパティを通じて Windows Workflow Foundation のパラメータ バインディング機構を使用します。パラメータ バインディングを使用して、ワークフロー クラス プロパティと、前にコントラクトで示した操作の戻り値を関連付ける方法を次の例に示します。この例で、ActivityBind オブジェクトは、ワークフロー サービス クラスの実装時に定義された ReturnValue 文字列プロパティを使用して作成されます。WorkflowParameterBinding は、作成されると、SetBinding メソッドを使用して ActivityBind オブジェクトに関連付けられます。最後に、パラメータ バインディングが ParameterBindings コレクションに追加され、ReceiveActivity アクティビティに関連付けられます。

ActivityBind activitybind1 = new ActivityBind();

activitybind1.Name = "ContractFirstServiceWorkflow";
activitybind1.Path = "ReturnValue";
WorkflowParameterBinding returnValueBinding = new WorkflowParameterBinding();
returnValueBinding.ParameterName = "(ReturnValue)";
returnValueBinding.SetBinding(WorkflowParameterBinding.ValueProperty, ((ActivityBind)(activitybind1)));
this.doWorkReceiveActivity.ParameterBindings.Add(returnValueBinding);

サービス バインディングとエンドポイントの作成

クライアントがワークフロー サービスに接続する場合、アドレス、バインディング、およびコントラクトの型の情報を使用してエンドポイントを構成する必要があります。エンドポイントは、アプリケーション構成ファイルを使用して構成できます。エンドポイント情報以外に、サービスが示す特定の動作も使用できます。このトピックで使用したコントラクトの場合、以下に示す App.config ファイルによって、クライアントはサービスに接続し、情報を交換すると共に、サービスに関するコントラクト情報をダウンロードできます。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="Microsoft.WorkflowServices.Samples.ContractFirstServiceWorkflow" behaviorConfiguration="ServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8888/ContractFirstService.svc" />
          </baseAddresses>
        </host>
        <endpoint address ="" binding="wsHttpContextBinding" contract="Microsoft.WorkflowServices.Samples.IContractFirstService" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceCredentials>
            <windowsAuthentication
                allowAnonymousLogons="false"
                includeWindowsGroups="true" />
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

ReceiveActivity アクティビティを使用することができる特定の高度なシナリオが存在します。詳細については、「ワークフロー サービスを使用したメッセージ交換」を参照してください。

関連項目

参照

ReceiveActivity
ServiceContractAttribute
OperationContractAttribute
TypedOperationInfo
ActivityBind
WorkflowParameterBinding
ParameterBindings

概念

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

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.