SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Workflow Foundation 4が導く新しい開発スタイル

開発者と非開発者を結ぶ新パラダイム「Workflow Foundation 4」

Workflow Foundation 4が導く新しい開発スタイル(1)

  • X ポスト
  • このエントリーをはてなブックマークに追加

長期にわたるプロセスライフサイクル

 通常のアプリケーションとは異なり、数日~数か月に及ぶ形で実行が継続することもありえるのがWFアプリケーションにおける特徴の一つです。その場合、実行しているサーバーやクライアントを常に起動し続けているのであれば問題はありませんが、どうしても再起動が必要になることもありえます。一般的なアプリケーションでこのようなケースに対応するためには、アプリケーション側で状態を保持する仕組みを実装しておく必要がありますが、WFではSQL Serverを初めとする外部ストレージに、ワークフローの状態を保存する機能(永続化機能)が標準として提供されています。この機能を利用するのも非常に容易で、次のようなロジックを記述することで利用できます。

サンプルコード(Visual Basic)
Dim wfApp As New WorkflowApplication(New Workflow1())
Dim store As New SqlWorkflowInstanceStore(connectionString)
wfApp.InstanceStore = store
サンプルコード(C#)
WorkflowApplication wfApp = new WorkflowApplication(new Workflow1());
SqlWorkflowInstanceStore store = new SqlWorkflowInstanceStore(connectionString);
wfApp.InstanceStore = store;

 全体概略図として掲載した、簡単な図の右下部にSqlWorkflowInstanceStoreクラスが記載されており、そこからSQL Serverへと線が引かれていました。上記のロジックはその部分を表しており、このような記述をすることでワークフローの状態をSQL Serverに保存できるようになります。保存を行うタイミングは実行待ち状態(データの受け取り待機等)の際に自動で行いますが、独自に実装を行うことで異なるタイミングによる保存も可能です。また基底クラスInstanceStoreクラスも公開されていますので、それを継承し独自の保存処理(テキストファイルへの保存や別DBMSへの保存など)を行うことも可能です。

永続化環境を作成するためのスクリプト

 SQL Server上にWF 4用永続化環境を作成するためのスクリプトは.NET Frameworkのインストールされている次のフォルダに用意されています。
 

  • (Windowsフォルダ)\ Microsoft.NET \(Framework または Framework64)\ (バージョン番号)\ SQL \ ja
WF 4用スクリプトが保存されているフォルダ
WF 4用スクリプトが保存されているフォルダ

 上記フォルダにスキーマ定義用のSqlWorkflowInstanceStoreSchema.sqlと、トリガーなどの処理定義用のSqlWorkflowInstanceStoreLogic.sqlが保存されており、これを実行するだけで作成できます。同じフォルダにはWF 3用スクリプトも用意されていますが、記載内容がWF 3とは異なるため、注意が必要です。

WF 3.xとWF 4/4.5の違い

 一見するとWF 4はWF 3.xのバージョンアップと思われますが、内部構造がすべて変更されています。利用する名前空間もSystem.WorkflowからSystem.Activitiesへと変更されました。大きく変更したためレスポンスは数十倍以上も向上しているのですが、反面WF 3.xで作成されたワークフローを利用できない、というデメリットが発生します。

 WF 4ではInteropアクティビティとしてWF 3.xのアクティビティを実行させることができますが、すべてのアクティビティを実行できるものではありません。またCodeplexでWFMigration Kitとして移行ツールが公開されていますが、こちらもすべてのWF 3.xワークフローを移行できるものでもありません。

 他にもWF 3.xとWF 4では多くの違いがあります。WF 4ではStatemachine(状態遷移型ワークフロー)が利用できない(注1)という点や、SQL Serverに保存するテーブル構成の変更なども異なります。もし諸条件が許すのであれば、WF 4用に作り直すことが後々を考慮してベターな方法になると考えられます。

 そして間もなく登場するであろうWF 4.5では更なる機能強化が図られています。新規アクティビティの追加や、ワークフローデザイナーの強化、実行中のワークフローをバージョンアップする際に利用するバージョニングなどが、WF 4.5において提供されます。

注1:Statemachineワークフロー

 .NET Framework Platform Update 4.0.1(KB2495593)以降を適用することで利用可能です。Platform Update 4.0.1以降というのは、現時点でPlatform Update 4.0.2、Platform Update 4.0.3と公開されており、最新リリースであるPlatform Update 4.0.3では、同4.0.1や同4.0.2の内容も含まれています。なおStatemachine型ワークフローについてはその前身となるプロトタイプ版がCodeplex上で公開されており、こちらは.NET Framework 4上で動作します。

WF 4.5でのアクティビティアイコン変更

 2012/5/16時点ではアクティビティのリソースとして定義されているアイコン情報が置換されます。.NET 4.5は.NET 4のインプレースアップグレード(置き換え形式でのアップグレード)なので、一度 .NET 4.5を導入するとWF 4のアイコンがすべて置き換わることになります。
 

WF 4アクティビティのアイコン
WF 4アクティビティのアイコン
WF 4.5 アクティビティのアイコン
WF 4.5 アクティビティのアイコン

 正式リリースの際にどのようになるかはまだ判明していませんが、WFを利用しかつワークフローのデザイン機能を提供しているケースで今後の情報に注意する必要があります。

WF 4で標準提供されるアクティビティ

 WF 4では標準で多くのアクティビティが提供されています。ここでは利用頻度が高めと思われる一部のアクティビティについて説明します。

標準提供されるアクティビティ(一部)
アクティビティ名 説明
Assign 作成した変数に値を代入したり、クラスのインスタンス生成時に利用したりします。
WriteLine 標準出力に対して文字列の出力を行います。
ForEach For形式のループ処理を行います。実行するアクティビティが待機状態になった際に、別アクティビティの処理を実行するよう切り替えるParallelForEachアクティビティもあります。
If 条件式の結果に基づき処理を二分岐させます。多分岐を行うSwitchアクティビティもあります。
Receive 外部からメッセージの受け取りを行います。Webサービスの呼び出される受け口などに利用します。
Send 外部へとメッセージの送信を行います。別途用意されているサービスの呼び出しを行う際に利用します。Receiveアクティビティも同様ですが、送受信の際に必要な初期設定があらかじめ行われている状態から利用できる、ReceiveAndSendReply、SendAndReceiveReplyテンプレートデザイナーが用意されていますので、通常はこちらを利用するのが便利です。
InvokeMethod 静的メソッドを呼び出します。ただし引数の数が同一でその型が異なる形でオーバーロードされているようなメソッドは、呼び出すことができません。
TryCatch 例外処理を行います。一般的なコードによる実装に近い形で、例外をトラップした場合に実行するCatchセクションや、必ず実行するFinallyセクションが用意されています。

Microsoft製品や.NET FrameworkにおけるWF 4の利用

 WF 4は利用可能になってからある程度の年月が過ぎていますが、実際に利用されている製品となるとMicrosoft製品であってもまだ少数です。現在確認できる製品としてはTeam Foundation Server 2010とBizTalk Serverくらいであり、他製品では利用されていないと思われます。Sharepoint Serverはワークフロー機能を提供していますがWF 3.xを利用しています。またWFと同様にデザイナー上でコンポーネントを配置できるSQL Server Integration ServicesやSystem Center OrchestratorはWFを利用せずに独自の実装が行われています。

 他には.NET Frameworkの一部でWF 4が利用されているのが確認できています。現在はEntity Frameworkの内部クラスCsdlToSsdlAndMsiActivityクラスとSsdlToDdlActivityクラスがWF 4のアクティビティとして作成されていました。

次回予定

 次回はWF 4の実装について紹介します。3種類存在するアクティビティの違いとその実装について、そしてアクティビティデザイナーについても紹介する予定です。

参考資料

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Workflow Foundation 4が導く新しい開発スタイル連載記事一覧

もっと読む

この記事の著者

小尾 智之(オビ トモユキ)

地方企業に勤めるインディープロレス好きなエンジニア。VB + SQL Server のシステム構築を主な業務としていましたが、元々の性格もあり色々な物に目移り中。Ahf というハンドルネームで所属する北海道の技術コミュニティ CLR/H(http://clr-h.jp) での活動など行っていましたが、最近か...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6601 2012/06/13 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング