「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>非同期処理サービス]]

*目次 [#l99d7a60]
#contents

*問題点 [#f68ee18c]
https://github.com/OpenTouryoProject/OpenTouryo/issues/164

*概要 [#t7897707]
非同期処理サービス構築のチュートリアル作成前段階のメモ

*準備 [#o4de8db2]
環境を準備する。
-Visual Studio 2010 以上の任意のエディション
-SQL Server 任意のバージョンとエディション
-Open棟梁のテンプレート

検証は、
-Visual Studio 2015
-SQL Server 2014
-root_VS2015

を使用した。

*手順 [#k7526d20]
**インストール [#c7a36a00]
以下をインストール
-Visual Studio 2010 以上の任意のエディション
-SQL Server 任意のバージョンとエディション

**Open棟梁のテンプレート [#i51aae22]
-GithubからOpen棟梁のテンプレートを取得~
https://github.com/OpenTouryoProject/OpenTouryoTemplates

-root_VS2010-2015のうちの何れかをC:\rootとしてデプロイ。
-Readme.mdを参考にして一通りのビルドを行う。

**データベース [#p1584081]
***作成 [#tab50cc2]
-AsyncProcessingServiceDBというデータベースを作成する。

***セキュリティ設定 [#pf71cac2]
サービス・アカウントからSQL Serverにログインする。

なので、以下の手順に従って、~
ローカル・システム・アカウントのログインと権限付与をする。

-システム・アカウントのユーザを作成する。
-アクセス権限を付与する。
--「所有されているスキーマ」に”db_owner”を追加する。
--「メンバーシップ」に”db_owner”を追加する。

***テーブルの作成 [#f0cf24e1]
-このデータベースにテーブルを作成する。以下のSQLファイルを実行する。~
https://github.com/OpenTouryoProject/OpenTouryo/tree/develop/root/files/resource/Sql/sqlserver/AsyncProcessingService
--CreateAsyncProcessingServiceStatusManagementTableScript.sql
--CreateEnumAsyncCommandTableScript.sql
--CreateOpenTouryoCodeTableScript.sql


*非同期処理サービス [#i40a783a]
**設定 [#z4cc4309]
app.configファイルの接続文字列を設定する。

  <connectionStrings>
    <!-- SQL Server / SQL Client用 -->
    <add name="ConnectionString_SQL" connectionString="Data Source=localhost\sqlexpress;Integrated Security=SSPI;Initial Catalog=AsyncProcessingServiceDB;"/>
  </connectionStrings>

**ビルド [#nf5e0b97]
AsyncProcessingServiceをビルドする。~
Visual Studioからソリューション・ファイルを開いてビルドする。

**インストール [#o45055de]
ビルド出力(*.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が登録されていることを確認する。

*非同期処理の開発 [#z4af95b3]
非同期処理のクライアントとサーバを開発する。

以下のソリューションファイルを開くと、2つのプロジェクトが開く。
 "C:\root\programs\C#\Samples\AsyncSvc_sample\AsyncSvc_sample.sln"

**非同期処理のクライアント [#w2ce300a]
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]
普通にビルドする。

**非同期処理のサーバ [#n3a5e637]
AsyncSvc_sample

登録された非同期処理を取り出しディスバッチする先のビジネスロジック。

***ビルド [#w63c00dd]
普通にビルドする。

ビルドが完了したら、非同期処理サービスのプロジェクト出力フォルダにコピーする。
 "C:\root\programs\C#\Frameworks\Infrastructure\ServiceInterface\AsyncProcessingService\bin\Debug"

*非同期処理サービスの実行 [#vcbb4b26]
-AsyncProcessingServiceをSCMから開始する。
-TestAsyncSvc_Sampleを実行して非同期タスクを登録する。
-非同期処理管理テーブルを監視して非同期処理が遂行されることを確認する。
-非同期処理サービスが実行されない場合は以下のログを分析する。
--パス:"C:\root\files\resource\Log\"
--ファイル:
---ASYNC-SERVICE
---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]

***DamKeyforABT [#ufd0bd77]
業務テーブルにアクセスする場合に使用するDam

***DamKeyforAMT [#w634b0ee]
非同期処理管理テーブルにアクセスする場合に使用するDam

***接続文字列 [#kdbfb08d]
-非同期処理管理テーブルと業務テーブルが同じデータベース内にある場合は、~
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) [#v52fba2c]
-非同期処理のサーバ処理のエントリポイント。
-[[通信制御機能]]のインプロセス呼び出しにより呼び出される。
-インプロセス呼び出しの定義は以下のファイルの中に定義にされている。
 "C:\root\programs\C#\Frameworks\Infrastructure\ServiceInterface\AsyncProcessingService\TMInProcessDefinition.xml"

***処理の流れ [#ree55049]
-DeserializeFromBase64Stringメソッドで業務データを復元
-GetCommandValueメソッドによりCommandIDを取得する。

-CommandIDがStopの場合、
--ResumeProcessingメソッドでCommandIDを「0」クリアする。
--既存処理をResumeを行う。

-それ以外の場合、
--新規処理の初期化を行う。

-Updateメソッドにより業務処理を行う。
-処理を抜けた場合、正常終了の扱いとなる。

**SerializeToBase64Stringメソッド [#mdb0de11]
DeserializeFromBase64Stringメソッドで、~
userParameterValue.Dataの業務データを~
バイナリデータからオブジェクトへ復元する。

**GetCommandValueメソッド [#l414409c]
非同期処理管理テーブルから~
本非同期タスクのTaskIDに対応するCommandIDを取得する。

**ResumeProcessingメソッド [#o51c05c4]
非同期処理管理テーブルの~
本非同期タスクのTaskIDに対応するCommandIDを「0」クリアする。

**Updateメソッド(業務処理) [#d4591798]
業務処理を実行する。
必要に応じてループで実装する。

-GetCommandValueメソッドによりCommandIDを取得する。

-取得したCommandIDをチェックする。
--Stop:業務例外をthrowして処理をリトライする。
--Abort:システム例外をthrowして処理をABENDする。
--その他:
---業務処理を続行する。
---進捗率をUpdateProgressRateメソッドでアップデートする。

**UpdateProgressRateメソッド [#ze76a4c2]
非同期処理管理テーブルの~
本非同期タスクのTaskIDに対応する進捗率をアップデートする。


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS