Open棟梁 wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

  • Open棟梁v02-30以降のリポジトリ分割後の手順(非同期処理サービスv01-00)。
  • 旧手順(v02-20以前)はコチラを参照。

準備

環境を準備する。

  • Visual Studio 2015 以上の任意のエディション
  • SQL Server 以上の任意のバージョンとエディション
  • 非同期処理サービス v01-00 以上のテンプレート

本ページの作成と検証には、

  • Windows 10
  • Visual Studio 2015
  • SQL Server 2016

を使用した。

手順

前提ソフトウェアのインストール

以下をインストール

  • Visual Studio 2015 の任意のエディション
  • SQL Server 2016 の任意のエディション

非同期処理サービスのテンプレート

取得

デプロイ

rootをC:\rootにデプロイ。

ビルド

ビルドを行う。

  • C:\root\programs\CS\3_Build_Framework.bat
  • C:\root\programs\VB\3_Build_Framework.bat

データベースの準備

作成

  • AsyncProcessingServiceDBというデータベースを作成する。

セキュリティ設定

サービス・アカウントからSQL Serverにログインする。

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

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

テーブルの作成

非同期処理サービス

設定

app.configファイルの接続文字列を設定する。

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

ビルド

AsyncProcessingService?をビルドする。

  • Visual Studioからビルド
  • もしくは、batでビルド
    C:\root\programs\CS\4_Build_AsyncProcessingService.bat

インストール

ビルド出力(*.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\CS\Frameworks\Infrastructure\AsyncProcessingService\bin\Debug\AsyncProcessingService.exe"
  • 管理ツールのサービス(コマンドからはservices.msc)を起動し、
    サービスの一覧にAsyncProcessingService?が登録されていることを確認する。

非同期処理タスク

非同期処理タスクのクライアントとサーバを開発する。

以下のソリューションファイルを開くと、2つのプロジェクトが開く。

C:\root\programs\CS\Samples\AsyncSvc_sample\AsyncSvc_sample.sln

非同期処理タスクを投入するクライアント

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からビルド
    • もしくは、batでビルド
      • C:\root\programs\CS\5_Build_AsyncSvcSample?.bat
      • C:\root\programs\VB\5_Build_AsyncSvcSample?.bat

サーバで実行される非同期処理タスク

AsyncSvc_sample

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

  • ビルド
    • Visual Studioからビルド
    • もしくは、batでビルド
      • C:\root\programs\CS\5_Build_AsyncSvcSample?.bat
      • C:\root\programs\VB\5_Build_AsyncSvcSample?.bat
  • デプロイ
    • ビルドが完了したら、非同期処理サービスのプロジェクト出力フォルダにコピーする。
      "C:\root\programs\CS\Frameworks\Infrastructure\AsyncProcessingService\bin\Debug"
    • もしくは、batでデプロイ
      C:\root\programs\CS\6_CopyToService.bat

非同期処理サービスの実行

実行

  • AsyncProcessingService?をSCMから開始する。
  • 非同期処理タスクを投入する。
    • TestAsyncSvc_Sampleを実行する。
    • もしくは、batで投入する。
      C:\root\programs\CS\7_SubmitTask.bat

確認

  • 非同期処理管理テーブルを監視して非同期処理が遂行されることを確認する。
    非同期処理管理テーブル
  • 非同期処理サービスが実行されない場合は以下のログを分析する。
    "C:\root\files\resource\AsyncProcessingService?\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

非同期処理サービスの開発方法

引数・戻り値、B層、D層

非同期処理サービス本体

非同期処理タスクの開発方法

https://github.com/OpenTouryoProject/AsynchronousProcessingService/blob/develop/root/programs/CS/Samples/AsyncSvc_sample/AsyncSvc_sample/LayerB.cs

MyApsBaseLogic?

DamKeyforABT

業務テーブルにアクセスする場合に使用するDam

DamKeyforAMT

非同期処理管理テーブルにアクセスする場合に使用するDam

接続文字列

  • 非同期処理管理テーブルと業務テーブルが同じデータベース内にある場合は、
    DamKeyforABTとDamKeyforAMTの接続文字列には同じ接続文字列を使用する。
  • 非同期処理管理テーブルと業務テーブルが異なるデータベース内にある場合は、
    以下をカスタマイズして、DamKeyforABTとDamKeyforAMTの接続文字列を分割する。

UOC_Start(UOC_XXXX)

概要

設定

インプロセス呼び出しの定義は以下のファイルの中に定義にされている。

https://github.com/OpenTouryoProject/AsynchronousProcessingService/blob/develop/root/files/resource/AsyncProcessingService/Xml/TMInProcessDefinition.xml

処理の流れ

  • JsonConvert?.DeserializeObject?メソッドで業務データを復元
  • GetCommandValueメソッドによりCommandIDを取得する。
  • CommandIDがStopの場合、
    • ResumeProcessingメソッドでCommandIDを「0」クリアする。
    • 既存処理のResumeを行う。
  • それ以外の場合、
    • 新規処理の初期化を行う。
  • Updateメソッドにより業務処理を行う。
  • 処理を抜けた場合、正常終了の扱いとなる。

業務処理メソッド

業務処理(Updateメソッド)

  • 取得したCommandIDをチェックする。
    • Stop:業務例外をthrowして処理をリトライする。
    • Abort:システム例外をthrowして処理をABENDする。
    • その他:
  • 補足
    • 必要に応じてループで実装する。
    • サンプルでは一定の確率で

確率計算メソッド

ダミーの業務処理。

  • GenerateProgressRate?メソッド
    ランダムに進捗率を返す。
  • Fortuneメソッド
    ランダムに真/偽を返す。

Utilityメソッド

v02-30から、Utilityメソッドの実装を以下に移動。

GetCommandValue?メソッド

非同期処理管理テーブルから本非同期タスクのTaskIDに対応するCommandIDを取得する。

ResumeProcessing?メソッド

非同期処理管理テーブルの本非同期タスクのTaskIDに対応するCommandIDを、
UpdateTaskCommandメソッドによって「0」クリアする。

UpdateProgressRate?メソッド

非同期処理管理テーブルの本非同期タスクのTaskIDに対応する進捗率をアップデートする。

UpdateTaskCommand?メソッド

非同期処理管理テーブルの本非同期タスクのTaskIDに対応するCommandIDを更新する。


添付ファイル: filedb.png 31件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-28 (金) 21:35:33 (77d)