Workflow Manager 1.0 ワークフローでのカスタム コード アクティビティと型の定義と使用

 

発行: 2016年5月

Workflow Manager 1.0 ワークフローは、完全宣言型モデルを使用して記述されていますが、カスタム コード ベースのアクティビティまたはカスタム データ タイプが必要な場合は、サーバー管理者が、このトピックで説明する手順を使用してこのカスタム タイプをサポートされているタイプに追加できます。各タイプは明示的に追加できます (これは特に運用環境においては推奨されます)。または、任意のコードの実行に対する保護を無効にすることができます。これは、サーバー上のすべてのアセンブリからのすべてのタイプが許可されているのと同様の効果があります。この方法により、開発プロセスが簡単になる可能性がありますが、セキュリティに影響するため、運用環境では一般には適しません。

このトピックの内容

  • カスタム コード アクティビティのサポート

  • カスタム データ型のサポート

  • カスタム コード アクティビティまたはデータ型の削除

  • 任意のコードの実行に対する保護の無効化によるカスタム コードのサポート

注意

このトピックでは、Workflow Manager 1.0 でのカスタム コード アクティビティの使用の概要について説明します。カスタム コード アクティビティの作成の詳細については、「Designing and Implementing Custom Activities」および「Authoring Workflows, Activities, and Expressions Using Imperative Code」を参照してください。Workflow Manager 1.0 は、Activity および CodeActivity から継承するカスタム アクティビティをサポートします。

カスタム コード アクティビティのサポート

Workflow Manager 1.0 で、独自の宣言型アクティビティおよび宣言型ワークフローを発行し使用することができます。また、一連の豊富な、そのまま使用できる、ユーザーのアクティビティおよびワークフローで使用できるワークフローアクティビティを用意しています。Workflow Manager 1.0 はまた、「信頼済みサーフェス」を定義します。これは、サポートされるタイプおよびアクティビティのセットを含みます。

注意

Workflow Manager 1.0 の既定のアクティビティおよび信頼済みサーフェスの詳細については、「Workflow Manager 1.0 のアクティビティの概要」および「Workflow Manager 1.0 Trusted Surface」を参照してください。

許可されたタイプおよびアクティビティのセットの拡張は、Workflow Manager 1.0 のセキュリティ、パフォーマンス、スケーラビリティ、および可用性に大きな影響を与える可能性があり、たとえば宣言型アクティビティにおいて作者にとって実行不可能な、ワークフローで精密な計算またはデータ変換を実行する必要がある場合など、絶対的な必要性がない限り考慮する必要はありません。この場合、熟練したユーザーは代わりにカスタム コード アクティビティを使用できます。サーバー管理者は、このコード アクティビティを完全に信頼している場合には、許可されたタイプのセットを拡張してこのコード アクティビティを含めることができます。

注意

整合性モデルに含める通信を確保するため、通信 I/O を実行するアクティビティは、サポートされている HTTP メッセージング アクティビティを使用してください。詳細については、「Workflow Manager 1.0 でのメッセージング」および「Http アクティビティ」を参照してください。

許可されているタイプのセットを拡張するには、管理者は次の手順を実行する必要があります。

  1. タイプを含むアセンブリ (カスタム コード アクティビティなど) を、すべての従属ファイルと共に、次の 2 つのフォルダーにコピーします。

    • C:\Program Files\Workflow Manager\1.0\Workflow\WFWebRoot\bin

    • C:\Program Files\Workflow Manager\1.0\Workflow\Artifacts

  2. AllowedTypes.xml というファイルを C:\Program Files\Workflow Manager\1.0\Workflow\WFWebRoot\bin に作成します。

  3. 次の例に示すように、AllowedTypes.xml を編集して、<AllowedTypes> xml 要素内に必要なタイプを追加します。

    <AllowedTypes>
      <Assembly Name="Contoso.DataTransformations">
        <Namespace Name="Contoso.DataTransformations.Activities">
          <Type>DoDomainSpecificCalculation1</Type>
        </Namespace>
      </Assembly>
    
      <Assembly Name="Contoso.StronglyTypedAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
        <Namespace Name="Contoso.FinancialCalculation.Activities">
          <Type> GetPresentValueOfABond</Type>
        </Namespace>
      </Assembly>
    </AllowedTypes>
    
  4. AllowedTypes.xml を、次の 2 番目のフォルダーにコピーします。C:\Program Files\Workflow Manager\1.0\Workflow\Artifacts

  5. 次に計画したメンテナンス ウィンドウを表示している間に Workflow Manager 1.0 サーバーを再起動します。

注意

複数サーバーを展開している場合は、上記の手順を各サーバーで実行する必要があります。

これで、手順 3. で追加したタイプを、新しくパブリッシュされたアクティビティやワークフローで使用できるようになります。

注意

Workflow Manager 1.0 では、上記の方法は、Activity または CodeActivity ベース クラスから派生するカスタム コード アクティビティに限ります。

カスタム データ型のサポート

カスタム データ タイプは、許可されたタイプのセットにも追加できます。同じ手順セットは、ワークフローでそのタイプを使用できるようにするために、上記の手順に従う必要があります。ただし、そのカスタム データ タイプのプロパティにアクセスしたり初期化したりするためには、許可されているタイプのリストに、さらにアクティビティを追加する必要がある場合があります。プロパティの参照は、式トランスレーターにより自動処理されません。したがって、VB 式はこの目的で使用できません。たとえば、カスタム タイプ Employee に Name と Salaryプロパティがあり、これらのプロパティにワークフローからアクセスする必要がある場合、GetEmployeeName と GetEmployeeSalary カスタム コード アクティビティを記述し、許可されたタイプ リストに追加する必要があります。

カスタム コード アクティビティまたはデータ型の削除

以前に追加したタイプを、許可されたタイプのリストから削除するには、次の手順を実行してください。

  1. 各サーバー上の 2 つの場所 (C:\Program Files\Workflow Manager\1.0\Workflow\WFWebRoot\bin および C:\Program Files\Workflow Manager\1.0\Workflow\Artifacts) で AllowedTypes.xml を編集し、許可されたタイプのリストから削除する 1 つまたは複数のタイプへの参照を削除します。

  2. WorkflowServiceBackend サービスをすべてのサーバーで停止します。

  3. すべてのサーバーの WorkflowMgmtPool アプリケーション プールを停止します。これにより、Workflow Manager 1.0 サーバーが使用できなくなるため、メンテナンス期間に行ってください。

  4. すべてのサーバー上で、前に C:\Program Files\Workflow Manager\1.0\Workflow\WFWebRoot\bin および C:\Program Files\Workflow Manager\1.0\Workflow\Artifacts にコピーしたすべてのカスタム ファイルを削除します。

  5. すべてのサーバーで WorkflowMgmtPool アプリケーション プールを起動します。

  6. WorkflowServiceBackend サービスをすべてのサーバーで起動します。

  7. 削除したタイプで使用されていたすべての宣言型アクティビティとワークフローを、今後参照しないように、また削除したタイプを参照しないように削除し、削除したタイプを参照しない、新しいバージョンのアクティビティとワークフローをパブリッシュします。

任意のコードの実行に対する保護の無効化によるカスタム コードのサポート

Workflow Manager 1.0 で、管理者は、任意のコードの実行に対する保護を無効にできます。これは、時間がたつにつれ、許可されたタイプのリストにさらに必要なタイプを追加する手間がかからないようにするため、カスタム コードを使用するソリューションの開発時に便利なオプションです。任意のコードの実行に対する保護を無効にすると、サーバー上のすべてのアセンブリからのすべてのタイプが許可されているのと同様の効果が得られます。これは、対応するセキュリティへの影響があるため、信頼されたユーザーのみが、ワークフロー アクティビティのアップロードまたは Workflow Manager 1.0 に使用されるデータベースの変更を行う権限を持つように Workflow Manager 1.0 が構成されている場合にのみ使用してください。

任意のコードの実行に対する保護を無効にするには

Workflow Manager 1.0 で任意のコードの実行に対する保護を無効にするには、管理者が次の手順を実行する必要があります。

  1. Workflow PowerShell コマンド ウィンドウを開きます。

    注意

    Workflow PowerShell コマンド ウィンドウを開く手順については、「PowerShell を使用した Workflow Manager 1.0 の構成」を参照してください。

  2. 次のパラメーターを使用して Set-WFServiceConfiguration コマンドレットを実行します。

    • ServiceUri の場合、ワークフロー サーバーの URI (たとえば、https://myserver.mydomain.mycompany.com:12290) を指定します。

    • Name の場合、WorkflowServiceAllowUnsafeTypes を指定します。

    • Value の場合、true を指定します。

任意のコードの実行に対する保護を再度有効にするには

Workflow Manager 1.0 で任意のコードの実行に対する保護を再度有効にするには、管理者が次の手順を実行する必要があります。

  1. Workflow PowerShell コマンド ウィンドウを開きます。

    注意

    Workflow PowerShell コマンド ウィンドウを開く手順については、「PowerShell を使用した Workflow Manager 1.0 の構成」を参照してください。

  2. 次のパラメーターを使用して Set-WFServiceConfiguration コマンドレットを実行します。

    • ServiceUri の場合、ワークフロー サーバーの URI (たとえば、https://myserver.mydomain.mycompany.com:12290) を指定します。

    • Name の場合、WorkflowServiceAllowUnsafeTypes を指定します。

    • Value の場合、false を指定します。