Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

WF(Windows Workflow Foundation)チュートリアル 中編

Vista時代のプログラミングモデル .NET Framework 3.0入門 (6)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2007/09/25 10:00

ダウンロード サンプルソース (19.0 KB)

WF(Windows Workflow Foundation)は.NET Framework 3.0に搭載された新しいワークフロー基盤です。中編ではステートマシン ワークフローのプログラミングモデルについて解説し、サンプルを作成します。

目次

はじめに

 WFチュートリアル 前編ではWFの概要、そしてシーケンシャル ワークフローのサンプルについて解説しました。中編となる今回は、ステートマシン ワークフローのプログラミングモデルについて解説し、サンプルを作成します。

 サンプルとしては、注文と発送だけを処理する簡易注文管理アプリケーションを考えます。状態遷移は以下の2つです。

  • 商品を注文すると注文完了状態(発送待ち状態)に遷移する
  • 商品を発送すると注文完了状態から発送完了状態に遷移し、終了する

 ワークフロー的には以下のようになります。

簡易注文管理アプリケーションワークフロー
簡易注文管理アプリケーションワークフロー

 実際のアプリケーションではステート数や遷移数がもっと多くなるかと思いますが、このサンプルで、

  • Visual Studio 2005でのステートマシン ワークフローのデザイン
  • ワークフロー内外のデータのやり取り
  • 複数ワークフローのハンドリング

 についてしっかり押さえておけば、多くのパターンに応用していけるでしょう。

対象読者

 本記事はC#でのプログラミングを行ったことがある方を対象としています。サンプルを動作させるための環境設定等は「WPF(Windows Presentation Foundation)+XAML入門 前編」をご覧ください。

ステートマシン ワークフロー プログラミング

 前回、「シーケンシャル ワークフロー」と「ステートマシン ワークフロー」の違いを説明しましたが、この違いはプログラミングモデルにも影響してきます。

シーケンシャル ワークフローとのプログラミングモデルの違い

 シーケンシャル ワークフローはステートを持たないため、ホスティングするアプリケーションから実行させた後は、基本的にワークフロー側で処理が進みます。従って、最初にパラメータを渡してしまえば情報のやり取りはそれほど必要ありません。ワークフローを一旦実行すれば、後はワークフローに処理をお任せできる、投げっぱなしにできる場合も多いことでしょう。

 しかし、ステートマシン ワークフローはイベントをトリガとして状態が変わっていくモデルですので、ワークフローを実行した後、ホスティングアプリケーションからイベントをワークフローに通知する必要があります。

 また、比較的短時間で終わることの多いシーケンシャル ワークフローに対し、ステートマシン ワークフローはイベントが発生しない限り処理が進まないため、複数のワークフローをハンドリングする必要があります。こうした点も、シーケンシャル ワークフローとは異なる部分と言えます。シーケンシャル ワークフローでもホスティングアプリケーションからのイベントを待つことは可能ですが、1種類のイベントを受け付けるのが基本で、複数のイベントを待ち受けようとすると煩雑なワークフローとなってしまいます。ステートマシン ワークフローでは、複数のワークフローに対して、複数のイベントを同時に待ち受けることができますので、イベントドリブンのモデルをそのままワークフロー化することができます。

 繰り返しとなりますが、ステートマシン ワークフローでは、

  • ワークフロー内外のデータのやり取り
  • 複数ワークフローでのイベントハンドリング

 がポイントとなります。

データ交換サービス

 ワークフローとホスティングアプリケーションの情報のやり取りのため、WFには「データ交換サービス」というサービスがあります。データ交換サービスはワークフローにイベントを発行し、ワークフローからホスティングアプリケーションを呼び出すためのメソッドを公開します。

 実際には、C#のインターフェースとして情報をやり取りするためのイベント/メソッドを作成し、それをデータ交換サービスを介してワークフロー ランタイムに登録することになります。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 土井 毅(ドイ ツヨシ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:Vista時代のプログラミングモデル .NET Framework 3.0入門
All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5