Download - Nawatech 20131123
![Page 1: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/1.jpg)
WF で夢見る世界 Ahf(小尾 智之)
![Page 2: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/2.jpg)
自己紹介
魂の VB 使い
WF メイニア
CLR/H スタッフ
てすとぶろぐ http://blogahf.blogspot.jp/
@twit_ahf
Tomoyuki.Obi @IT エンジニアライフ
地方からの戯言
プロレス好き
DDT / BJW / K-DOJO
![Page 3: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/3.jpg)
本日のアジェンダ
Workflow Foundation 概略
WF で運用管理
![Page 4: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/4.jpg)
![Page 5: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/5.jpg)
Workflow Foundation
WPF や WCF と同じく
.NET Framework コンポーネント
直観的な
デザイナ
WF 3.x と
WF 4.x
アクティビティと
ワークフロー
サービスの作成
![Page 6: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/6.jpg)
• アクティビティ
デザイナー
• ワークフロー
サービス
WF と 関連技術
WCF WPF
• 永続化機構
(標準提供)
SQL Server
• ワークフロー
サービス
IIS
![Page 7: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/7.jpg)
WF を利用している製品
SharePoint
BizTalk
TFS
~2010 は WF 3.x
2013 は WF 4.x
2010~ は WF 4.x
2010~ は WF 4.x
![Page 8: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/8.jpg)
WF を利用しているコンポーネント
PowerShell PowerShell 3.0 より利用
PowerShell は内部で WF 4.x を利用
PowerShell Workflow は PowerShell のスクリプトをワークフロー化させて WF ランタイム上で動作
WF ワークフローは PowerShell で呼び出し / 実行可能
PowerShell のコマンドレットは
WF アクティビティとしても提供
![Page 9: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/9.jpg)
WF と PowerShell Workflow
Workflow
Foundation
PowerShell
Workflow workflow Get-Sample
{
Dir
}
実行
Xaml に変換
![Page 10: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/10.jpg)
WF と PowerShell Workflow
Workflow
Foundation
PowerShell
Workflow
実行
LoadModule で読込
Workflow
Foundation
実行は WF 上
![Page 11: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/11.jpg)
WF と PowerShell Workflow
Workflow
Foundation
PowerShell
Workflow
PowerShell のスクリプト
WF のワークフロー
どちらを利用しても同様のことが可能
どちらを利用しても相互変換可能
![Page 12: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/12.jpg)
次世代の WF
Workflow
Manager
Workflow のホスティングを行うアプリケーション
オンプレミス/クラウド上を問わずに簡易に
ワークフローホスティングを行うアプリケーション
IIS の設定等が不要
セキュリティ要件が厳しめに変更され
WF 4.x アクティビティの一部が利用不可
基本演算を行うアクティビティなどが大量に追加
別名 Azure Workflow Services
![Page 13: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/13.jpg)
WF 3.x と 4.x
WF 3.x のデザイナーは
流れを表す
WF 4.x のデザイナーは
流れと設定を表す
![Page 14: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/14.jpg)
WF 3.x と 4.x
3.x と 4.x はクラス構成も
変更され全くの別物
基底クラスから全て異なる
3.x で実装された処理を
4.x で利用する特殊措置
Interop アクティビティ
CodePrex で移行キットを提供
基本は作り直し
WF 3.x を利用してないのなら
気にしないのが幸せです
![Page 15: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/15.jpg)
WF 4.x での主な改善点
WF 3.x よりもパフォーマンス向上
全面的に向上しすぎ
今まではなんだったんだ
http://msdn.microsoft.com/ja-jp/library/gg281645.aspx
参考:MSDN:Windows Workflow Foudation 4 のパフォーマンス
![Page 16: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/16.jpg)
アクティビティとワークフロー
アクティビティ
アクティビティ
アクティビティ
アクティビティ
アクティビティ
アクティビティ
アクティビティ
アクティビティ
アクティビティ
ビルド ビルド
アクティビティを設置したワークフローをビルドすることで
ワークフロー自体がアクティビティとなり再利用できる
![Page 17: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/17.jpg)
アクティビティデザイナー
WPF によるユーザー
コントロール作成と同じ
Express 環境の場合は ActivityDesigner クラスを
利用するよう xaml を書き換えることで作成可能
![Page 18: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/18.jpg)
デザイナーのメリット
WPF 画面の作成と同様 WPF でできることは
同じく実現可能
デザイナー上での入力 プロパティダイアログを
見なくても設定可能
インテリセンス対応 WF 固有の ExpressionTextbox
ではインテリセンス自作可能
![Page 19: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/19.jpg)
WF サービス
WF サービスプロジェクトの初期状態
メッセージの受信と結果の送信が既に用意されている
間に処理を挟むことで
サービスとして作成
![Page 20: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/20.jpg)
![Page 21: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/21.jpg)
スクリプト資産
MS-DOS
VBS
WSH
PowerShell
似ていても微妙に
違うスクリプトの
大量発生
![Page 22: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/22.jpg)
スクリプト資産
MS-DOS
VBS
WSH
PowerShell
スクリプト改修には
知識が必要なケース
![Page 23: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/23.jpg)
スクリプト資産
MS-DOS
VBS
WSH
PowerShell
スクリプトを
ラップする中間層
何を利用しているかを
意識する必要がない
プログラム 開発では
よく利用する方法
![Page 24: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/24.jpg)
スクリプトのラップ
ラップする方法は多種多様
既存スクリプトを Process.Start で実行
.NET のライブラリを利用
MS-DOS VBS WSH PowerShell
スクリプトを
ラップする中間層
どの方法を用いても良いが
ラップする手法自体は統一しておくと楽
![Page 25: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/25.jpg)
運用管理の基本形
WMI
WMF
エージェント
アプリ
ケーション
![Page 26: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/26.jpg)
運用管理するためのベース
WMF のリリースによって楽になっているがWMI ベースは変化していない
WMF PowerShell
WinRM
WMI
WinRS
![Page 27: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/27.jpg)
WMI を利用するアクティビティ
WMI を直接操作
スクリプトを実行
PowerShell のクラスを利用
![Page 28: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/28.jpg)
Dim objWMIResult
Dim objLocator
Dim objService
Dim objWMIClass
Dim strPCName
'ローカルコンピュータに接続しクエリを実行する
objLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
objService = objLocator.ConnectServer
objWMIResult = objService.ExecQuery("Select * From Win32_ComputerSystem")
‘結果の取得
For Each objWMIClass In objWMIResult
strPCName = objWMIClass.Name
Next
ローカルのホスト名取得
VBS スクリプト
Get-WmiObject Win32_ComputerSystem | select Name
ローカルのホスト名取得
PS スクリプト
![Page 29: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/29.jpg)
Imports System.Activities
Imports System.Management
Public Class WMIComputerSystem
Inherits CodeActivity(Of String)
Protected Overrides Function Execute(context As CodeActivityContext) As String
Dim result = ""
Dim wmScope As New ManagementScope("¥¥" + My.Computer.Name + "¥root¥cimv2")
wmScope.Connect
Dim wmQuery As New ObjectQuery("SELECT * FROM Win32_ComputerSystem")
Using searcher As New ManagementObjectSearcher(wmScope, wmQuery)
Using queryCollection = searcher.Get()
For Each wmResult In queryCollection
result = wmResult("Name").ToString
Exit For
Next
End Using
End Using
Return result
End Function
End Class
ローカルのホスト名取得
WF4 アクティビティ
![Page 30: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/30.jpg)
作成したアクティビティをワークフローに配置し実行
実行結果は問題ないが
見た目で処理がわかりにくい
![Page 31: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/31.jpg)
見た目の分かりやすさ
日本語で記述するだけでイメージが変わる
![Page 32: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/32.jpg)
見た目の分かりやすさ
WF4.5 からは注釈を設定でき
より見た目で理解しやすく
![Page 33: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/33.jpg)
アクティビティデザイナーは WPF
ワークフローデザイナーは WPF 上で動作するので
アクティビティデザイナーも当然 WPF で動作する
WPF アプリケーションでできることは
WF のアクティビティデザイナーでも実現可能
音声を流すデザイナーも作成できるので
利用を補助する「声によるコメント」も可能
![Page 34: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/34.jpg)
WMI プロバイダの作成
System Center は WMI プロバイダから値を
取得するのをサポートしているのでプロバイダを
自作することで色々なものを監視することができる
WMI プロバイダ
基幹システム 3rdパーティ製品
既存監視
スクリプト
WMI だけでは
難しい監視
![Page 35: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/35.jpg)
WMI プロバイダ
アプリケーションから WMI に情報を配信するための仕組みが用意されており
独自に実装することができる
分離型
• セルフホスト型
• 実行中のみ可能
• 管理者権限が必要
インプロセス型
• WMI サービスホスト
• 常に利用可能
• GAC への配置が必要
![Page 36: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/36.jpg)
作成したアセンブリを
InstallUtil.exe で登録する必要がある
管理者権限で実行
インプロセス型の場合GAC に登録が必要
アセンブリの署名必須
![Page 37: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/37.jpg)
Imports System.Management.Instrumentation
Public Class Form1
Private wmiProvider As New SampleWMIProvider(Diagnostics.Process.GetCurrentProcess.Id)
Private executeTimer As System.Threading.Timer = Nothing
Private Sub Closed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
InstrumentationManager.Revoke(wmiProvider)
End Sub
Private Sub Form1_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown 'タイマーにて1秒ごとにテキストボックスの内容を出力
executeTimer = New Timer(New TimerCallback(AddressOf OutputData), Nothing, 0, 1000) ' WMI プロバイダの公開
InstrumentationManager.Publish(wmiProvider)
End Sub
Private Sub OutputData()
wmiProvider.DisplayText = TextBox1.Text
End Sub
End Class
Imports System.Management.Instrumentation
Imports System.ComponentModel
''' <summary>WMI プロバイダインストーラクラス</summary>
<RunInstaller(True)>
Public Class SampleWMIProviderInstaller
Inherits DefaultManagementInstaller
End Class
インストーラクラス
入力用フォーム
![Page 38: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/38.jpg)
Imports System.Management.Instrumentation
' アセンブリに対しての WMI 設定指定
<Assembly: WmiConfiguration("root/clrh",
HostingModel:=ManagementHostingModel.Decoupled,
IdentifyLevel:=False)>
<ManagementEntity(name:="clrh")> <ManagementQualifier("Description", Value:="サンプル WMI プロバイダで誰でも利用可能です")>
Public Class SampleWMIProvider
#Region "プロパティ定義"
<ManagementKey()> <ManagementQualifier("Description", value:="プロセス Id を取得します")>
Public Property Id As Integer
<ManagementConfiguration()> <ManagementQualifier("Description", value:="表示されている文字列を取得します")>
Public Property DisplayText As String
#End Region
#Region "コンストラクタ"
Public Sub New(ByVal Id As Integer)
Me.Id = Id
End Sub
#End Region
End Class
WMI プロバイダ
![Page 39: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/39.jpg)
WF で運用管理
WF サービス
監視情報を公開するサービスの提供
監視アクティビティ
ワークフロー
情報を公開する土壌を WF で作成することで
見た目に理解しやすい形になるのでカスタマイズの
難易度も低下できる
![Page 40: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/40.jpg)
WF サービスとストアアプリ
ストアアプリで手軽に外部サービスを
利用する方法がサービス参照
.NET アプリしか接続できない
WF を組み合わせることでストアアプリの
監視ツールを作成するのが容易に
![Page 41: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/41.jpg)
「できる人を増やす」ために
専門的
直観的
大小混ぜた粒度
• 見た目で処理の概要がわかるよう
• 適度なコメント
• 汎用さは多くの指定が必要に
• 無駄が生み出す理解しやすさ
• 部品の粒度はこだわらなくて良い
• 小回りが利く≠利用しやすい
最初のうちは処理の中身まで知る必要はなく
「なんとなく」でもできるようになるのを優先
![Page 42: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/42.jpg)
まとめ
既存資産を置き換える必要はなく WF でラッピングすることにより利用しやすく
WF はコードを書かない非開発者向け
開発者視点で WF を利用する利点はなく
いかに他の人に利用しやすくするか
スクリプトを書くよりも敷居が低いので
処理を作成する難易度を下げられる
理想は「全員が技術に精通すること」だが
そこを目指すために WF でまずは使わせることも
一つの手段としてはありだと思います。
![Page 43: Nawatech 20131123](https://reader033.vdocuments.net/reader033/viewer/2022051818/549c1158ac7959e72a8b4622/html5/thumbnails/43.jpg)
Appendix
The Activity Designer (http://blogs.msdn.com/b/tilovell/)
AppFabric Team Blog(旧 The .NET EndPoint) (http://blogs.msdn.com/b/appfabric/)
MS 松崎さん Blog (http://blogs.msdn.com/b/tsmatsuz/)
てすとぶろぐ (http://blogahf.blogspot.com/)
恐らく退職などでもう更新されていない MSDN Blog Matt W's Windows Workflow Place
(http://blogs.msdn.com/b/mwinkle/)
Go with the Flow (http://blogs.msdn.com/b/flow/)
Cathy Dumas’s Blog (http://blogs.msdn.com/b/cathyk/)
Kushal Shah – Workflows (http://blogs.msdn.com/b/kushals/)