「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>非同期処理サービス]] *目次 [#ld25e8d1] #contents *概要 [#sf4b4148] [[非同期処理サービス]]構築のチュートリアル作成前段階のメモ *準備 [#a7c2e6de] 環境を準備する。 -Visual Studio 2010 以上の任意のエディション -SQL Server 任意のバージョンとエディション -Open棟梁 v01-70 以上のテンプレート 本ページの作成と検証には、 -Windows 7 -Visual Studio 2015 -SQL Server 2014 -root_VS2015(v02-20) を使用した。 *手順 [#x445dade] **前提ソフトウェアのインストール [#e3e22d57] 以下をインストール -Visual Studio 2010 以上の任意のエディション -SQL Server 任意のバージョンとエディション **[[非同期処理サービス]]のテンプレート [#n5812bc3] ***取得 [#c82a8793] -GithubからOpen棟梁(v01-70 以上)- 非同期処理サービスのテンプレートを取得~ https://github.com/OpenTouryoProject/OpenTouryoTemplates --必要に応じて、branchやtagを指定。以下は、02-20のtagを指定した場合。~ https://github.com/OpenTouryoProject/OpenTouryo/tree/02-20 ***デプロイ [#z5312d78] root_VS2010-2015のうちの何れかをC:\rootとしてデプロイ。 ***ビルド [#c241ea76] Readme.mdを参考にして一通りのビルドを行う。 **データベースの準備 [#s0240817] ***作成 [#g96ed721] -AsyncProcessingServiceDBというデータベースを作成する。 ***セキュリティ設定 [#lfdd7d5c] サービス・アカウントからSQL Serverにログインする。 なので、以下の手順に従って、~ ローカル・システム・アカウントのログインと権限付与をする。 -システム・アカウントのユーザを作成する。 --Windows ユーザー --NT AUTHORITY\SYSTEM -アクセス権限を付与する。 --「所有されているスキーマ」に”db_owner”を追加する。 --「メンバーシップ」に”db_owner”を追加する。 ***テーブルの作成 [#nfba18e9] -このデータベースにテーブルを作成する。以下のSQLファイルを実行する。~ https://github.com/OpenTouryoProject/OpenTouryo/tree/02-20/root/files/resource/Sql/sqlserver/AsyncProcessingService --CreateAsyncProcessingServiceStatusManagementTableScript.sql --CreateEnumAsyncCommandTableScript.sql --CreateOpenTouryoCodeTableScript.sql **[[非同期処理サービス]] [#nd7f243e] **[[非同期処理サービス]]の準備 [#nd7f243e] ***設定 [#x8185bb2] app.configファイルの接続文字列を設定する。 <connectionStrings> <!-- SQL Server / SQL Client用 --> <add name="ConnectionString_SQL" connectionString="Data Source=localhost\sqlexpress;Integrated Security=SSPI;Initial Catalog=AsyncProcessingServiceDB;"/> </connectionStrings> ***ビルド [#k8d96065] AsyncProcessingServiceをビルドする。~ Visual Studioからソリューション・ファイルを開いてビルドする。 C:\root\programs\C#\Frameworks\Infrastructure\ServiceInterface\AsyncProcessingService\AsyncProcessingService.sln ***インストール [#d904c281] ビルド出力(*.exe)をWindowsサービスとしてインストールする。 -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が登録されていることを確認する。 **非同期処理タスク [#k54bf73d] **非同期処理タスクの概要 [#k54bf73d] 非同期処理のクライアントとサーバを開発する。 以下のソリューションファイルを開くと、2つのプロジェクトが開く。 "C:\root\programs\C#\Samples\AsyncSvc_sample\AsyncSvc_sample.sln" ***非同期処理タスクを投入するクライアント [#e2a3cf97] TestAsyncSvc_Sample 非同期処理をキューに登録するプログラム。 -設定~ app.configファイルの接続文字列を設定する。 <connectionStrings> <!-- SQL Server / SQL Client用 --> <add name="ConnectionString_SQL" connectionString="Data Source=localhost\sqlexpress;Integrated Security=SSPI;Initial Catalog=AsyncProcessingServiceDB;"/> </connectionStrings> -ビルド~ Visual Studioから普通にビルドする。 ***サーバで実行される非同期処理タスク [#ma5282bf] AsyncSvc_sample 登録された非同期処理を取り出しディスバッチする先のビジネスロジック。 -ビルド~ Visual Studioから普通にビルドする。 -デプロイ~ ビルドが完了したら、[[非同期処理サービス]]のプロジェクト出力フォルダにコピーする。 "C:\root\programs\C#\Frameworks\Infrastructure\ServiceInterface\AsyncProcessingService\bin\Debug" **[[非同期処理サービス]]の実行 [#ya79b39f] ***実行 [#u132a415] -AsyncProcessingServiceをSCMから開始する。 -TestAsyncSvc_Sampleを実行して非同期処理タスクを投入する。 ***確認 [#z7f71db1] -非同期処理管理テーブルを監視して非同期処理が遂行されることを確認する。 #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 *[[非同期処理サービス]]の開発方法 [#pb6b5072] **引数・戻り値、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 [#uef4e193] 非同期処理管理テーブルにアクセスする場合に使用するDam ***接続文字列 [#bfb3a689] -非同期処理管理テーブルと業務テーブルが同じデータベース内にある場合は、~ DamKeyforABTとDamKeyforAMTの接続文字列には同じ接続文字列を使用する。 -非同期処理管理テーブルと業務テーブルが異なるデータベース内にある場合は、~ 以下をカスタマイズして、DamKeyforABTとDamKeyforAMTの接続文字列を分割する。 **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 ***概要 [#necf8a68] -[[サーバで実行される非同期処理タスク>#ma5282bf]]のエントリポイント。 -[[通信制御機能]]のインプロセス呼び出しにより呼び出される。 ***設定 [#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>#e40a69f7]]メソッドでCommandIDを「0」クリアする。 --既存処理のResumeを行う。 -それ以外の場合、 --新規処理の初期化を行う。 -Updateメソッドにより業務処理を行う。 -処理を抜けた場合、正常終了の扱いとなる。 **業務処理メソッド [#h47d5d87] -https://github.com/OpenTouryoProject/OpenTouryo/blob/02-20/root/programs/C%23/Samples/AsyncSvc_sample/AsyncSvc_sample/LayerB.cs#L221 ***Updateメソッド(業務処理) [#w087037a] -[[GetCommandValue>#w05390ae]]メソッドによりCommandIDを取得する。 -取得したCommandIDをチェックする。 --Stop:業務例外をthrowして処理をリトライする。 --Abort:システム例外をthrowして処理をABENDする。 --その他: ---業務処理([[GenerateProgressRate>#mde46ab2]])を実行する。 ---進捗率を[[UpdateProgressRate>#gbfce054]]メソッドでアップデートする。 -補足 --必要に応じてループで実装する。 --サンプルでは一定の確率で ---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を更新する。 IP:210.234.63.131 TIME:"2020-03-20 (金) 17:02:53" REFERER:"https://opentouryo.osscons.jp/index.php?cmd=edit&page=%E9%9D%9E%E5%90%8C%E6%9C%9F%E5%87%A6%E7%90%86%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E6%A7%8B%E7%AF%89%E3%81%AE%E8%A6%9A%E6%9B%B8%EF%BC%88%E6%97%A7%EF%BC%89" USER_AGENT:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"