SHOEISHA iD

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

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

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

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

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

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

永続化サービスの動作確認

 では、アプリケーションを実行してみましょう。

 ワークフローの実行に対応してイベントが発生していきます。イベントごとにダイアログが表示されるので、順を追って確認しましょう。

アプリケーション初期状態
アプリケーション初期状態

 [商品注文]ボタンを押下すると、ワークフローが起動して処理が行われ、その後にアイドル状態に変化します。

WorkflowIdledイベント発生
WorkflowIdledイベント発生

 続いて、ワークフローがアイドル状態になったことを検知した永続化サービスが、ワークフローを永続化します。

WorkflowPersistedイベント発生
WorkflowPersistedイベント発生

 永続化させたため、メモリ上に不要となったワークフローがアンロードされます。

WorkflowUnloadedイベント発生
WorkflowUnloadedイベント発生

 では、[指定商品発送]ボタンを押下し、ワークフローにイベントを与えて処理を再開させましょう。永続化したワークフローへのイベント送出を検知した永続化サービスがワークフローをメモリからロードします。

WorkflowLoadedイベント発生
WorkflowLoadedイベント発生

 ロードしたワークフローの処理が行われ、ワークフローからホスティングアプリケーション側のメソッドが呼ばれ、ダイアログが表示されます。これは中編で実装したもので、永続化サービスとは無関係です。

"発送完了"ダイアログ
"発送完了"ダイアログ

 ワークフローは完了状態に到達しますが、完了する前に再び永続化が行われます(前項の、ワークフローが永続化されるタイミング、を参照してください)。

WorkflowPersistedイベント発生
WorkflowPersistedイベント発生

 最後に、ワークフローが完了状態となります。

WorkflowCompletedイベント発生
WorkflowCompletedイベント発生

 (ダイアログ表示を除き)表面上は前回のアプリケーションと同じ挙動をしていますが、実際にはどのように永続化されているのでしょうか。

 永続化直後、つまりWorkflowPersistedイベント発生直後のデータベースを見てみましょう。永続化されたデータはInstanceStateテーブルに保存されています。

WorkflowPersistedイベント発生直後 永続化されたデータ
WorkflowPersistedイベント発生直後 永続化されたデータ

 uidInstanceIDフィールドに、ワークフローのインスタンスIDが格納され、stateフィールドに、ワークフローをバイナリ化したデータが格納されています。

 ワークフロー完了後、つまりWorkflowCompletedイベント発生後のデータベースを見てみましょう。

WorkflowCompletedイベント発生後 データは存在しない
WorkflowCompletedイベント発生後 データは存在しない

 ワークフロー完了時には永続化されたデータは削除されています。

 永続化サービスの追加により、ワークフローの永続化・ロードが自動的に行われることを確認できました。

永続化サービスの活用

 ここまで見てきたとおり、WFの永続化サービスの組み込みは非常に容易です。ワークフロー側に永続化のための特別な設定をする必要はなく、またホスティングアプリケーション側で永続化のためのさまざまなコードが必要になるわけではありません。SQL Serverへの接続文字列を指定して永続化サービスを生成し、ワークフローランタイムに登録する、ただそれだけで永続化サービスの恩恵を受けることができます。

 例えばワークフローの各イベントをWebサービス経由で受け取れるようにすれば、受注管理や稟議といったワークフローベースのアプリケーションを、サーバにホスティングしたWFで実現することができます。当然こういうケースでは、複数のワークフローがメモリ上に蓄積していきますので、永続化サービスを用いることになるでしょう。

 今回使用したSqlWorkflowPersistenceServiceクラスはSQL Serverにバイナリでワークフローを永続化しているため、永続化されたデータを直接アプリケーションで扱うのは容易ではありません。しかし、WorkflowPersistenceServiceクラスを継承した、カスタム永続化サービスを実装すれば、ファイル保存やDBへの保存など、さまざまな仕方での永続化を実現できます。

 WFの実用性を大いに高めてくれる永続化サービス、ぜひご活用ください。

シリーズまとめ

 全…7回におよんだ.NET Framework 3.0入門シリーズも今回がついに最終回となりました。

 何もかも手探り状態だったWPF記事から、原稿を重ねるうちに、もうVisual Studio 2008の足音が聞こえる時期になってきました。シリーズ執筆中に次のバージョンが出たらどうしよう、というのが執筆中の悩みでしたが、無事シリーズを完走することができました。

 .NET Framework 3.0で導入されたWPF/WCF/WF(+WCS)は、それぞれ広い範囲に活用可能なコンポーネントです。最近世間を賑わしているMicrosoft社のRIA技術であるSilverlightも、よくご存じの通り、以前WPF/Eと呼ばれていた、(広義で言えば)WPFの関連技術です。

SilverlightとXAML
 ただ、Silverlightの最近の話題は、XAMLよりもJavaScriptやDLR(Dynamic Language Runtime 動的言語に対応したCLR環境)およびDLR上で動作するIronPythonやIronRubyといった方向に進んでいます。以前は「WPF/EはWPFのサブセット的な存在です」と解説していましたが、今はXAMLとJavaScript(やDLRの対応言語)を使うRIA技術、という解説になるかもしれません。RIA関連の技術が急速に進歩していく、というのは世の中の趨勢でしょうか。

 WCFは派手なフレームワークではありませんが、.NETベースで相互通信の必要なコンポーネントを作る際には非常に便利で、必須に近い技術かと思われます。

 WFは、プログラマ全員が活用するタイプのフレームワークではありませんが、これまでに存在しなかった(=プログラマの発想にもあまり無かった)、無償・汎用のワークフローフレームワークですので、これからさまざまな活用方法が考えられていくでしょう。

 まだ.NET Framework 3.0の新技術たちは十分に日の目を見ているわけではありませんが、Visual Studio 2008が本格的な仕切り直しとなり、アーリーアダプタからアーリーマジョリティへと普及が進んでいくと期待しています。

 長きにわたるシリーズへのご支持、ご意見に深く感謝し、シリーズの結びといたします。ぜひ本シリーズを眺めながら、.NET Framework 3.0の新機能をご活用ください。

Visual Studio 2008では
 Visual Studio 2008は.NET Framework 3.0への対応だけでなく、3.5で導入されるLINQなどの新機能を盛り込んだ、待望のメジャーバージョンアップとなるはずです。既にBeta 2も配布されていますので、イノベーターからアーリーアダプタな皆さまはぜひお試しください。

参考資料

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
Vista時代のプログラミングモデル .NET Framework 3.0入門連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

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

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング