- 追加された行はこの色です。
- 削除された行はこの色です。
「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。
-[[戻る>非同期処理サービス]]
*目次 [#l99d7a60]
*目次 [#ld25e8d1]
#contents
*問題点 [#f68ee18c]
https://github.com/OpenTouryoProject/OpenTouryo/issues/164
*概要 [#sf4b4148]
[[非同期処理サービス]]構築のチュートリアル作成前段階のメモ
*概要 [#t7897707]
非同期処理サービス構築のチュートリアル作成前段階のメモ
*準備 [#o4de8db2]
*準備 [#a7c2e6de]
環境を準備する。
-Visual Studio 2010 以上の任意のエディション
-SQL Server 任意のバージョンとエディション
-Open棟梁のテンプレート
-Open棟梁 v01-70 以上のテンプレート
検証は、
本ページの作成と検証には、
-Windows 7
-Visual Studio 2015
-SQL Server 2014
-root_VS2015
-root_VS2015(v02-20)
を使用した。
*手順 [#k7526d20]
**インストール [#c7a36a00]
*手順 [#x445dade]
**前提ソフトウェアのインストール [#e3e22d57]
以下をインストール
-Visual Studio 2010 以上の任意のエディション
-SQL Server 任意のバージョンとエディション
**Open棟梁のテンプレート [#i51aae22]
-GithubからOpen棟梁のテンプレートを取得~
**[[非同期処理サービス]]のテンプレート [#n5812bc3]
***取得 [#c82a8793]
-GithubからOpen棟梁(v01-70 以上)- 非同期処理サービスのテンプレートを取得~
https://github.com/OpenTouryoProject/OpenTouryoTemplates
--必要に応じて、branchやtagを指定。以下は、02-20のtagを指定した場合。~
https://github.com/OpenTouryoProject/OpenTouryo/tree/02-20
-root_VS2010-2015のうちの何れかをC:\rootとしてデプロイ。
-Readme.mdを参考にして一通りのビルドを行う。
***デプロイ [#z5312d78]
root_VS2010-2015のうちの何れかをC:\rootとしてデプロイ。
**データベース [#p1584081]
***作成 [#tab50cc2]
***ビルド [#c241ea76]
Readme.mdを参考にして一通りのビルドを行う。
**データベースの準備 [#s0240817]
***作成 [#g96ed721]
-AsyncProcessingServiceDBというデータベースを作成する。
***セキュリティ設定 [#pf71cac2]
***セキュリティ設定 [#lfdd7d5c]
サービス・アカウントからSQL Serverにログインする。
なので、以下の手順に従って、~
ローカル・システム・アカウントのログインと権限付与をする。
-システム・アカウントのユーザを作成する。
--Windows ユーザー
--NT AUTHORITY\SYSTEM
-アクセス権限を付与する。
--「所有されているスキーマ」に”db_owner”を追加する。
--「メンバーシップ」に”db_owner”を追加する。
***テーブルの作成 [#f0cf24e1]
***テーブルの作成 [#nfba18e9]
-このデータベースにテーブルを作成する。以下のSQLファイルを実行する。~
https://github.com/OpenTouryoProject/OpenTouryo/tree/develop/root/files/resource/Sql/sqlserver/AsyncProcessingService
https://github.com/OpenTouryoProject/OpenTouryo/tree/02-20/root/files/resource/Sql/sqlserver/AsyncProcessingService
--CreateAsyncProcessingServiceStatusManagementTableScript.sql
--CreateEnumAsyncCommandTableScript.sql
--CreateOpenTouryoCodeTableScript.sql
**[[非同期処理サービス]]の準備 [#nd7f243e]
*非同期処理サービス [#i40a783a]
**設定 [#z4cc4309]
***設定 [#x8185bb2]
app.configファイルの接続文字列を設定する。
<connectionStrings>
<!-- SQL Server / SQL Client用 -->
<add name="ConnectionString_SQL" connectionString="Data Source=localhost\sqlexpress;Integrated Security=SSPI;Initial Catalog=AsyncProcessingServiceDB;"/>
</connectionStrings>
**ビルド [#nf5e0b97]
***ビルド [#k8d96065]
AsyncProcessingServiceをビルドする。~
Visual Studioからソリューション・ファイルを開いてビルドする。
C:\root\programs\C#\Frameworks\Infrastructure\ServiceInterface\AsyncProcessingService\AsyncProcessingService.sln
**インストール [#o45055de]
***インストール [#d904c281]
ビルド出力(*.exe)をWindowsサービスとしてインストールする。
-CMDを起動し、CD(Change Directory)コマンドで以下のパスに移動
-CMDを管理者として起動し、CD(Change Directory)コマンドで以下のパスに移動
C:\Windows\Microsoft.NET\Framework64\v4.0.30319
-以下のInstallUtilコマンドで、ビルド出力(*.exe)をWindowsサービスとしてインストールする。
C:\Windows\Microsoft.NET\Framework64\v4.0.30319>InstallUtil.exe -i "C:\root\programs\C#\Frameworks\Infrastructure\ServiceInterface\AsyncProcessingService\bin\Debug\AsyncProcessingService.exe"
-管理ツールのサービス(コマンドからはservices.msc)を起動し、~
サービスの一覧にAsyncProcessingServiceが登録されていることを確認する。
*非同期処理の開発 [#z4af95b3]
**非同期処理タスクの概要 [#k54bf73d]
非同期処理のクライアントとサーバを開発する。
以下のソリューションファイルを開くと、2つのプロジェクトが開く。
"C:\root\programs\C#\Samples\AsyncSvc_sample\AsyncSvc_sample.sln"
**非同期処理のクライアント [#w2ce300a]
***非同期処理タスクを投入するクライアント [#e2a3cf97]
TestAsyncSvc_Sample
非同期処理をキューに登録するプログラム。
***設定 [#pf2864ef]
-設定~
app.configファイルの接続文字列を設定する。
<connectionStrings>
<!-- SQL Server / SQL Client用 -->
<add name="ConnectionString_SQL" connectionString="Data Source=localhost\sqlexpress;Integrated Security=SSPI;Initial Catalog=AsyncProcessingServiceDB;"/>
</connectionStrings>
***ビルド [#ibad0560]
普通にビルドする。
-ビルド~
Visual Studioから普通にビルドする。
**非同期処理のサーバ [#n3a5e637]
***サーバで実行される非同期処理タスク [#ma5282bf]
AsyncSvc_sample
登録された非同期処理を取り出しディスバッチする先のビジネスロジック。
***ビルド [#w63c00dd]
普通にビルドする。
-ビルド~
Visual Studioから普通にビルドする。
ビルドが完了したら、非同期処理サービスのプロジェクト出力フォルダにコピーする。
-デプロイ~
ビルドが完了したら、[[非同期処理サービス]]のプロジェクト出力フォルダにコピーする。
"C:\root\programs\C#\Frameworks\Infrastructure\ServiceInterface\AsyncProcessingService\bin\Debug"
*非同期処理サービスの実行 [#vcbb4b26]
**[[非同期処理サービス]]の実行 [#ya79b39f]
***実行 [#u132a415]
-AsyncProcessingServiceをSCMから開始する。
-TestAsyncSvc_Sampleを実行して非同期タスクを登録する。
-TestAsyncSvc_Sampleを実行して非同期処理タスクを投入する。
***確認 [#z7f71db1]
-非同期処理管理テーブルを監視して非同期処理が遂行されることを確認する。
-非同期処理サービスが実行されない場合は以下のログを分析する。
--パス:"C:\root\files\resource\Log\"
--ファイル:
---ASYNC-SERVICE
#ref(db.png,left,nowrap,非同期処理管理テーブル,50%)
-[[非同期処理サービス]]が実行されない場合は以下のログを分析する。~
"C:\root\files\resource\Log\"
--[[非同期処理サービス]]
---ASYNC-SERVICE.log
---ACCESS-ASYNC.YYYY-MM-DD.log
---SQLTRACE-ASYNC.YYYY-MM-DD.log
--クライアント
---ACCESS.YYYY-MM-DD.log
---SQLTRACE.YYYY-MM-DD.log
*非同期処理のサーバの開発方法 [#k0f6a268]
**Dam [#u9ff825a]
*[[非同期処理サービス]]の開発方法 [#pb6b5072]
***DamKeyforABT [#ufd0bd77]
**引数・戻り値、B層、D層 [#fa461efd]
-https://github.com/OpenTouryoProject/OpenTouryo/tree/02-20/root/programs/C%23/Frameworks/Infrastructure/Business/AsyncProcessingService
**[[非同期処理サービス]]本体 [#g1d61033]
-https://github.com/OpenTouryoProject/OpenTouryo/tree/02-20/root/programs/C%23/Frameworks/Infrastructure/ServiceInterface/AsyncProcessingService
*非同期処理タスクの開発方法 [#pb6b5072]
https://github.com/OpenTouryoProject/OpenTouryo/blob/02-20/root/programs/C%23/Samples/AsyncSvc_sample/AsyncSvc_sample/LayerB.cs
**MyApsBaseLogic [#z7b68fda]
-https://github.com/OpenTouryoProject/OpenTouryo/blob/02-20/root/programs/C%23/Frameworks/Infrastructure/Business/Business/MyApsBaseLogic.cs
--非同期処理タスクのB層が継承するクラス。
--業務テーブルと非同期処理管理テーブルに接続可能。
***DamKeyforABT [#md6775b3]
業務テーブルにアクセスする場合に使用するDam
***DamKeyforAMT [#w634b0ee]
***DamKeyforAMT [#uef4e193]
非同期処理管理テーブルにアクセスする場合に使用するDam
***接続文字列 [#kdbfb08d]
***接続文字列 [#bfb3a689]
-非同期処理管理テーブルと業務テーブルが同じデータベース内にある場合は、~
DamKeyforABTとDamKeyforAMTの接続文字列には同じ接続文字列を使用する。
-非同期処理管理テーブルと業務テーブルが異なるデータベース内にある場合は、~
以下をカスタマイズして、DamKeyforABTとDamKeyforAMTの接続文字列を分割する。
-MyApsBaseLogic.UOC_ConnectionOpen()メソッド~
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/Business/Business/MyApsBaseLogic.cs
**UOC_Start(UOC_XXXX) [#l83ef167]
-https://github.com/OpenTouryoProject/OpenTouryo/blob/02-20/root/programs/C%23/Samples/AsyncSvc_sample/AsyncSvc_sample/LayerB.cs#L184
**UOC_Start(UOC_XXXX) [#v52fba2c]
-非同期処理のサーバ処理のエントリポイント。
***概要 [#necf8a68]
-[[サーバで実行される非同期処理タスク>#ma5282bf]]のエントリポイント。
-[[通信制御機能]]のインプロセス呼び出しにより呼び出される。
-インプロセス呼び出しの定義は以下のファイルの中に定義にされている。
"C:\root\programs\C#\Frameworks\Infrastructure\ServiceInterface\AsyncProcessingService\TMInProcessDefinition.xml"
***処理の流れ [#ree55049]
-DeserializeFromBase64Stringメソッドで業務データを復元
-GetCommandValueメソッドによりCommandIDを取得する。
***設定 [#m0062182]
インプロセス呼び出しの定義は以下のファイルの中に定義にされている。
https://github.com/OpenTouryoProject/OpenTouryo/blob/02-20/root/programs/C%23/Frameworks/Infrastructure/ServiceInterface/AsyncProcessingService/TMProtocolDefinition.xml
***処理の流れ [#z7f12540]
-[[DeserializeFromBase64String>#i4045a40]]メソッドで業務データを復元
-[[GetCommandValue>#w05390ae]]メソッドによりCommandIDを取得する。
-CommandIDがStopの場合、
--ResumeProcessingメソッドでCommandIDを「0」クリアする。
--既存処理をResumeを行う。
--[[ResumeProcessing>#e40a69f7]]メソッドでCommandIDを「0」クリアする。
--既存処理のResumeを行う。
-それ以外の場合、
--新規処理の初期化を行う。
-Updateメソッドにより業務処理を行う。
-処理を抜けた場合、正常終了の扱いとなる。
**SerializeToBase64Stringメソッド [#mdb0de11]
DeserializeFromBase64Stringメソッドで、~
userParameterValue.Dataの業務データを~
バイナリデータからオブジェクトへ復元する。
**業務処理メソッド [#h47d5d87]
-https://github.com/OpenTouryoProject/OpenTouryo/blob/02-20/root/programs/C%23/Samples/AsyncSvc_sample/AsyncSvc_sample/LayerB.cs#L221
**GetCommandValueメソッド [#l414409c]
非同期処理管理テーブルから~
本非同期タスクのTaskIDに対応するCommandIDを取得する。
***Updateメソッド(業務処理) [#w087037a]
-[[GetCommandValue>#w05390ae]]メソッドによりCommandIDを取得する。
**ResumeProcessingメソッド [#o51c05c4]
非同期処理管理テーブルの~
本非同期タスクのTaskIDに対応するCommandIDを「0」クリアする。
**Updateメソッド(業務処理) [#d4591798]
業務処理を実行する。
必要に応じてループで実装する。
-GetCommandValueメソッドによりCommandIDを取得する。
-取得したCommandIDをチェックする。
--Stop:業務例外をthrowして処理をリトライする。
--Abort:システム例外をthrowして処理をABENDする。
--その他:
---業務処理を続行する。
---進捗率をUpdateProgressRateメソッドでアップデートする。
---業務処理([[GenerateProgressRate>#mde46ab2]])を実行する。
---進捗率を[[UpdateProgressRate>#gbfce054]]メソッドでアップデートする。
**UpdateProgressRateメソッド [#ze76a4c2]
非同期処理管理テーブルの~
本非同期タスクのTaskIDに対応する進捗率をアップデートする。
-補足
--必要に応じてループで実装する。
--サンプルでは一定の確率で
---StopとAbortを実行する。
---[[UpdateTaskCommand>#y4b09b2b]]メソッドを使用する。
***GenerateProgressRateメソッド [#mde46ab2]
ダミーの業務処理。ランダムな進捗率を返す。
**Utilityメソッド [#t9139027]
-https://github.com/OpenTouryoProject/OpenTouryo/blob/02-20/root/programs/C%23/Samples/AsyncSvc_sample/AsyncSvc_sample/LayerB.cs#L108
***DeserializeFromBase64Stringメソッド [#i4045a40]
DeserializeFromBase64Stringメソッドで、~
userParameterValue.Dataの業務データをバイナリデータからオブジェクトへ復元する。
***SerializeToBase64Stringメソッド [#y9726992]
[[DeserializeFromBase64String>#i4045a40]]メソッドの逆を行う。
***GetCommandValueメソッド [#w05390ae]
非同期処理管理テーブルから本非同期タスクのTaskIDに対応するCommandIDを取得する。
***ResumeProcessingメソッド [#e40a69f7]
非同期処理管理テーブルの本非同期タスクのTaskIDに対応するCommandIDを、~
[[UpdateTaskCommand>#y4b09b2b]]メソッドによって「0」クリアする。
***UpdateProgressRateメソッド [#gbfce054]
非同期処理管理テーブルの本非同期タスクのTaskIDに対応する進捗率をアップデートする。
***UpdateTaskCommandメソッド [#y4b09b2b]
非同期処理管理テーブルの本非同期タスクのTaskIDに対応するCommandIDを更新する。