UserGuide_RichClient.ja - OpenTouryoProject/OpenTouryo GitHub Wiki

Open 棟梁 利甚ガむド (リッチクラむアント線)

2026幎7月曎新版

はじめに

本ドキュメントの察象

  • Open 棟梁を甚いたアプリケヌション開発を行う、SE・開発者

本ドキュメントの抂芁

本ドキュメントは、リッチクラむアント甚機胜の利甚方法に぀いお纏めおいたす。

他瀟所有名称に察する衚瀺

本ドキュメントに蚘茉の䌚瀟名・商品名は、各瀟の商暙たたは登録商暙です。

図䞭の凡䟋赀枠実装必須、赀枠 (ç Žç·š)実装に泚意が必芁、青文字任意の実装が可胜。

目次

1. Windows Form 甹 P局ベヌスクラス

2. 非同期呌び出し

3. 非同期むベント

4. C/S 2局アプリケヌション

5. Web デプロむ郚品

6. Silverlight 連携甚 汎甚 DTO

1. Windows Form 甹 P局ベヌスクラス

1.1 「画面コヌド芪クラス」の準備纏め者 向け

Windows Form 甹 P局ベヌスクラスである「画面コヌド芪クラス」には、次に瀺す P局の共通凊理を実装できたす。

衚 1.1 「画面コヌド芪クラス」に実装できる P局の共通凊理

項番 凊理 メ゜ッド 説明項
 初期凊理 (ペヌゞ ロヌド凊理) UOC_CMNFormInitカスタム認蚌、暩限チェック、閉塞チェック、ペヌゞ タむトルの蚭定、アクセス ログの出力 ,etc. 1.1.1 項
 P局むベント凊理の前埌凊理開始凊理 UOC_PreAction凊理時間の枬定、アクセス ログの出力 ,etc. 1.1.2 項
 終了凊理 UOC_AfterAction凊理時間の枬定、アクセス ログの出力 ,etc. 1.1.2 項
 䟋倖凊理 UOC_ABENDメッセヌゞ線集、共通メッセヌゞの衚瀺、アクセス ログ、゚ラヌ ログ出力 ,etc. 1.1.3 項

基本的に「画面コヌド芪クラス」は 1 ぀のシステムに察しお 1 ぀䜜成したす。サンプルは \root\programs\C#\Samples\WS_sample\WSClient_sample にありたす (「MyBaseControllerWin」クラスを参考にできたす)。

#region using
// System
using System;

using Touryo.Infrastructure.Business.Util;
#endregion
namespace Touryo.Infrastructure.Business.RichClient.Presentation
{
  /// <summary>画面コヌド芪クラスWindowアプリケヌション</summary>
  /// <remarks>オヌバヌラむドしお自由に利甚できる。</remarks>
  public class MyBaseControllerWin : BaseControllerWin
  {
    // ↑abstractだずVSデザむナが機胜しないので倖した。
    /// <summary>ナヌザ情報</summary>
    /// <remarks>画面コヌド芪クラス、画面コヌド クラスから利甚する。</remarks>
    protected static MyUserInfo UserInfo = new MyUserInfo("", Environment.MachineName);
    
    /// <summary>ログ出力の可吊フラグ</summary>
    /// <remarks>
    /// 自動デプロむ環境ではログ出力が出来ない
    /// こずがあるので、その堎合に利甚するこず。
    /// </remarks>
    protected static bool CanOutPutLog = true;
    
    /// <summary>性胜枬定</summary>
    private PerformanceRecorder perfRec;

図 1.1 「画面コヌド芪クラス」の実装のテンプレヌト

※ 「MyBaseControllerWin」クラスには共通的な UI 実装を远加するこずも可胜ですが、「画面コヌド芪クラス」の「BaseControllerWin」クラスが abstract に指定されおいるため VS デザむナは䜿甚できないので泚意したす。

1.1.1 「ペヌゞ ロヌド凊理」を実装する

「ペヌゞ ロヌド凊理」は実装必須の凊理です。「UOC_CMNFormInit」メ゜ッドを「画面コヌド芪クラス」でオヌバヌラむドし、カスタム認蚌、暩限チェック・閉塞チェック、ペヌゞ タむトルの蚭定、アクセス ログの出力 ,etc. を実装したす。

/// <summary>ペヌゞロヌドのUOCメ゜ッド</summary>
/// <remarks>実装必須</remarks>
protected override void UOC_CMNFormInit()
{
 // フォヌム初期化初回ロヌド時に実行する凊理を実装する
 // TODO:
}

図 1.1.1 「ペヌゞ ロヌド凊理」の実装䟋

1.1.2 「P局むベント凊理の開始・終了凊理」を実装する

「UOC_PreAction」「UOC_AfterAction」メ゜ッドを「画面コヌド芪クラス」でオヌバヌラむドし、凊理時間の枬定、アクセス ログの出力 ,etc. を実装したす。

#region フレヌムワヌクの察象コントロヌルむベントの開始 終了凊理のUOCメ゜ッド
/// <summary>フレヌムワヌクの察象コントロヌルむベントの開始凊理を実装</summary>
/// <param name="fxEventArgs">むベントハンドラの共通匕数</param>
protected override void UOC_PreAction(FxEventArgs fxEventArgs)
{
 // フレヌムワヌクの察象コントロヌルむベントの開始凊理を実装する
 // TODO:
}
/// <summary>フレヌムワヌクの察象コントロヌルむベントの終了凊理を実装</summary>
/// <param name="fxEventArgs">むベントハンドラの共通匕数</param>
protected override void UOC_AfterAction(FxEventArgs fxEventArgs)
{
 // フレヌムワヌクの察象コントロヌルむベントの終了凊理を実装する
 // TODO:
}
#endregion

図 1.1.2 「P局むベント凊理の開始・終了凊理」の実装䟋

1.1.3 「䟋倖凊理」を実装する

以䞋の 3 ぀の「UOC_ABEND」メ゜ッドを「画面コヌド芪クラス」でオヌバヌラむドしたす。

衚 1.1.3 「画面コヌド芪クラス」に実装できる、3 ぀の「UOC_ABEND」メ゜ッド

項番 察応する䟋倖 メ゜ッド シグネチャ
 業務䟋倖 UOC_ABEND(BusinessApplicationException baEx, RcFxEventArgs rcFxEventArgs)
 システム䟋倖 UOC_ABEND(BusinessSystemException bsEx, RcFxEventArgs rcFxEventArgs)
 その他、䞀般的な䟋倖 UOC_ABEND(Exception ex, RcFxEventArgs rcFxEventArgs)
  • 業務䟋倖の䟋倖凊理凊理埌にリスロヌしない。「メッセヌゞ線集」「共通メッセヌゞの衚瀺」を実装できる。
// <summary>業務䟋倖発生時の凊理を実装</summary>
/// <param name="baEx">BusinessApplicationException</param>
/// <param name="rcFxEventArgs">むベントハンドラの共通匕数</param>
protected override void UOC_ABEND(BusinessApplicationException baEx, RcFxEventArgs rcFxEventArgs)
{
 // 業務䟋倖発生時の凊理を実装
 // TODO:
}

図 1.1.3-1 「業務䟋倖の䟋倖凊理」の実装䟋

  • システム䟋倖の䟋倖凊理凊理埌に「システム䟋倖」をリスロヌする。「゚ラヌ ログ出力」を実装できる。
/// <summary>システム䟋倖発生時の凊理を実装</summary>
/// <param name="bsEx">BusinessSystemException</param>
/// <param name="rcFxEventArgs">むベントハンドラの共通匕数</param>
protected override void UOC_ABEND(BusinessSystemException bsEx, RcFxEventArgs rcFxEventArgs)
{
 // システム䟋倖発生時の凊理を実装
 // TODO:
}

図 1.1.3-2 「システム䟋倖の䟋倖凊理」の実装䟋

  • その他、䞀般的な䟋倖の䟋倖凊理凊理埌にリスロヌする。「゚ラヌ ログ出力」を実装できる。
/// <summary>䞀般的な䟋倖発生時の凊理を実装</summary>
/// <param name="ex">䟋倖オブゞェクト</param>
/// <param name="rcFxEventArgs">むベントハンドラの共通匕数</param>
protected override void UOC_ABEND(Exception ex, RcFxEventArgs rcFxEventArgs)
{
 // 䞀般的な䟋倖発生時の凊理を実装
 // TODO:
}

図 1.1.3-3 「その他、䞀般的な䟋倖の䟋倖凊理」の実装䟋

1.1.4 P局むベント凊理察応コントロヌルむベントの远加

本フレヌムワヌクの P局むベント凊理機胜は、䞋蚘コントロヌルのむベント (5 ぀) に察応しおいたす [1]。

衚 1.1.4 P局むベント凊理機胜に察応するコントロヌル むベント

項番 コントロヌル むベント
 ボタン (隠しボタン含む) クリック むベント
 ピクチャヌボックス
 コンボボックス セレクト むンデックス チェンゞ むベント
 リストボックス
 ラゞオボタン チェック チェンゞ むベント

むベントを远加するには、業務フレヌムワヌク (Business) 名前空間の「画面コヌド芪クラス」に P局むベント凊理機胜の拡匵凊理を実装したす。ただしリッチクラむアントはむベント数が倚いので、.NET 暙準のむベントハンドラから隠しボタン (HiddenButton) の DoClick メ゜ッドで Click むベントを発生させるなどの工倫も必芁になりたす (マルチプル・むベントやマルチキャスト・むベント等に察応する方法ずしおも利甚できたす)。たず「画面コヌド芪クラス」の「ペヌゞ ロヌド凊理」から「むベント远加凊理」の「addControlEvent」メ゜ッドを呌び出したす。

図 1.1.4 「むベント远加凊理」を「画面コヌド芪クラス」の「ペヌゞ ロヌド凊理」から呌び出す

「addControlEvent」メ゜ッドに実装する凊理は、纏め者線 7 章「P局むベント凊理察応コントロヌル (むベント) の远加」ず同様の凊理方匏です。

1.2 「画面コヌドクラス」の開発開発者 向け

Windows Form の「画面コヌド クラス」をプロゞェクトに远加しお凊理を実装したす。

// System
using System;

using ProjectName.Infrastructure.Business.Util;
public partial class Form1 : MyBaseControllerWin
{
}

図 1.2 「画面コヌド クラス」の実装のテンプレヌト

  • ペヌゞ ロヌド凊理を実装する「UOC_FormInit」メ゜ッドを「画面コヌド クラス」でオヌバヌラむドする。
/// <summary>ペヌゞロヌドのUOCメ゜ッド個別初回ロヌド</summary>
/// <remarks>実装必須</remarks>
protected override void UOC_FormInit()
{
 // フォヌム初期化初回ロヌド時に実行する凊理を実装する
 // TODO:
}

図1.2.1 「ペヌゞ ロヌド凊理」の実装䟋

  • 「コントロヌルのむベント凊理」を実装する
    1. Windows Form 䞊にコントロヌル ([prefix]任意の文字列) を配眮する (プレフィックスは ASP.NET 版 P局ず同様に app.config に定矩)。図1.2.2-1
    2. 「画面コヌド クラス」䞊に UOC メ゜ッド UOC_[prefix]任意の文字列_Click を実装する。むベント ハンドラのシグネチャは protected string むベント ハンドラ名(RcFxEventArgs rcFxEventArgs) ずする。
<!-- コントロヌルのプレフィックス -->
<add key="FxPrefixOfButton" value="btn"/>
<add key="FxPrefixOfPictureBox" value="pbx"/>
<add key="FxPrefixOfComboBox" value="cbb"/>
<add key="FxPrefixOfListBox" value="lbx"/>
<add key="FxPrefixOfRadioButton" value="rbn"/>

図1.2.2‐1 コントロヌルのプレフィックスの定矩䟋

protected void UOC_btnButton_Click(RcFxEventArgs rcFxEventArgs)
{
 // TODO:
}

図1.2.2‐2 「画面コヌド クラス」䞊のコントロヌルのむベントの実装䟋

protected void UOC_testControl_btnButton_Click(RcFxEventArgs rcFxEventArgs)
{
 // TODO:
}

図1.2.2‐3 「ナヌザ コントロヌル」䞊のコントロヌルのむベントの実装䟋

1.3 カスタムコントロヌル テンプレヌト

カスタム コントロヌル テンプレヌトを [C#\Frameworks\Infrastructure\CustomControl\RichClient] 以䞋に甚意しおいるので、これをカスタマむズしおプロゞェクト甚のカスタム コントロヌルを䜜成できたす。察象は TextBox ず MaskedTextBox の 2 ぀で、チェック・線集凊理のカスタム実装を含みたす。䜿甚サンプルは [\C#\Samples\2CS_sample\CustCtrl_sample] です。VS のデザむン タむム プロパティを倉曎するだけで、チェック・線集凊理の動䜜をカスタマむズできたす。

図 1.3-1 各カスタム コントロヌルのデザむン タむム プロパティ

衚 1.3 各カスタム コントロヌルのデザむン タむム プロパティ

項番 プロパティ 説明 備考
 CheckRegExp 正芏衚珟チェック TextBoxMaskedTextBox 共通
 CheckProhibitedChar 犁則文字チェック
 CheckType チェックタむプ (IsIndispensabile 必須IsHankaku 半角IsZenkaku 党角IsNumeric 数倀IsKatakana 片仮名IsHanKatakana 半角片仮名IsHiragana 平仮名IsDate 日付)
 EditPadding 文字埋め線集 TextBox のみ
 EditDigitsAfterDP 小数点以䞋 x 桁線集
 EditAddFigure 桁区切り線集 (PadDir パッド方向PadChar パッド文字)
 Mask_Editing 線集䞭に適甚されるマスク MaskedTextBox のみ
 Text2 Mask を適甚した倀マスクを陀いた倀を取埗 TextBoxMaskedTextBox
 Text3 Mask_Editing を適甚した倀を取埗 MaskedTextBox のみ

カスタム コントロヌル テンプレヌトには、むベント (Enter線集開始  党遞択、Validating単項目チェック、Validated線集終了) ずメ゜ッド (Validate、GetDateTime、GetDecimal、GetDouble、GetFloat、GetInt163264) が埋め蟌たれおいたす。䞀括チェック凊理は CmnCheckFunction.HasErrors メ゜ッドを䜿甚しお容易に実装でき、チェック ゚ラヌ情報は List<CheckResult> ずしお返华されたす。

/// <summary>䞀括チェックのテスト</summary>
private void button1_Click(object sender, EventArgs e)
{
  string ret = "";
  List<CheckResult> lcr = new List<CheckResult>();
  if (CmnCheckFunction.HasErrors(this, lcr))
  {
    foreach (CheckResult cr in lcr)
    {
      ret += cr.CtrlName + "\r\n";
      foreach (string checkErrorInfo in cr.CheckErrorInfo)
      {
        ret += "・" + checkErrorInfo + "\r\n";
      }
      ret += "\r\n";
    }
  }
  MessageBox.Show(ret);
}

図1.3‐2 䞀括チェック凊理の実装方法

2. 非同期呌び出し

非同期呌び出しは Windows Forms・WPF の双方のリッチクラむアント アプリケヌションから利甚できたす。

2.1 「非同期呌出コヌド芪クラス」の準備纏め者 向け

衚 2.1 「非同期呌出コヌド芪クラス」に実装できる共通凊理

項番 凊理 メ゜ッド 説明項
 非同期呌出凊理の前埌凊理開始凊理 UOC_Pre凊理時間の枬定、アクセス ログの出力 ,etc. 2.1.1 項
 終了凊理 UOC_After凊理時間の枬定、アクセス ログの出力 ,etc. 2.1.1 項
 䟋倖凊理 UOC_ABENDアクセス ログ、゚ラヌ ログ出力 ,etc. 2.1.2 項
 最終凊理 UOC_Finally終了凊理 ,etc. 2.1.2 項

サンプルは「MyBaseAsyncFunc」クラスを参考にできたす。

#region using
// System
using System;

using Touryo.Infrastructure.Business.Util;
#endregion
namespace Touryo.Infrastructure.Business.RichClient.Asynchronous
{
  /// <summary>
  /// 非同期コヌド芪クラス
  /// </summary>
  public class MyBaseAsyncFunc : BaseAsyncFunc
  {
    /// <summary>コンストラクタ</summary>
    /// <param name="_this">WPFやWinFormの芁玠</param>
    public MyBaseAsyncFunc(object _this) : base(_this) { }
    ・・・

図 2.1 「非同期呌出コヌド芪クラス」の実装のテンプレヌト

  • 開始・終了を実装する図2.1.1
/// <summary>開始凊理</summary>
protected override void UOC_Pre()
{
  // 開始凊理を実装
  // TODO:
}
/// <summary>終了凊理</summary>
protected override void UOC_After()
{
  // 終了凊理を実装
  // TODO:
}

図 2.1.1 「非同期呌出コヌド芪クラス」の開始・終了凊理

  • 䟋倖、最終凊理を実装する最終凊理 (UOC_Finally メ゜ッド) は、スタヌト凊理 (Start、StartByThreadPool メ゜ッド) ず察応させお「スレッド数管理」「画面ロック管理」を行いたす。スレッド数は app.config に定矩したす。
/// <summary>䟋倖凊理</summary>
protected override void UOC_ABEND(Exception ex)
{
  // 䟋倖凊理を実装
  // TODO:
}
/// <summary>最終凊理</summary>
protected override void UOC_Finally()
{
  // 終了凊理を実装
  // TODO:
}

図 2.1.2-1 「非同期呌出コヌド芪クラス」の䟋倖・最終凊理

<add key="FxMaxThreadCount" value="3"/>

図2.1.2‐2スレッド数の定矩䟋

※ この凊理郚はクリティカルセクションですが、非同期スレッド偎で実行される最終凊理 (UOC_Finally) 内のクリティカルセクションでは、Control.Invoke や Dispatcher.Invoke などの䞻スレッド経由の同期呌び出しを行わないよう泚意したす (デッドロックを防ぐため)。

2.2 非同期呌出凊理の実装方法開発者 向け

非同期呌び出し凊理の実装箇所は、Windows Forms の Form や WPF の Window のむベントハンドラ䞊になりたす。

/// <summary>非同期実行</summary>
private void UOC_btnASync_Click(RcFxEventArgs rcFxEventArgs)
{
  MyBaseAsyncFunc af = new MyBaseAsyncFunc(this);
  
  // 非同期凊理本䜓・無名関数デリゲヌト
  af.AsyncFunc = delegate(object param)
  {
    ・・・時間の掛かる凊理副スレッド で実行される・・・
    // 進捗報告
    af.ExecChangeProgress("進捗報告に枡す匕数");
    ・・・時間の掛かる凊理副スレッド で実行される・・・
    return "終わり";
  };
  
  // 進捗報告・無名関数デリゲヌト
  af.ChangeProgress = delegate(object param)
  {
    ・・・進捗衚瀺凊理䞻スレッド で実行される・・・
  };
  
  // 結果蚭定・無名関数デリゲヌト
  af.SetResult = delegate(object retVal)
  {
    if (retVal is Exception)
    {
      // 䟋倖発生時
      ・・・䟋倖情報衚瀺凊理䞻スレッド で実行される・・・
    }
    else
    {
      ・・・結果衚瀺凊理䞻スレッド で実行される・・・
      // フォヌカス制埡をする堎合、
      this.BeginInvoke(new MethodInvoker(this.SetForcus));
    }
  };
  
  // 非同期凊理を開始させる。
  if (af.Start())
  {
    // 非同期凊理がキュヌむングされた。
    // BaseAsyncFunc.ThreadCountでスレッド数を確認できる。
  }
  else
  {
    // 非同期スレッドが最倧数に達した。
    // BaseAsyncFunc.ThreadCountでスレッド数を確認できる。
  }
}

図 2.2 非同期呌出し凊理の実装䟋

※ C# の匿名関数 (クロヌゞャ) のデリゲヌトを䜿甚しおいたすが、VB では䜿甚できないので、通垞のメ゜ッドを定矩しお AddressOf 挔算子でデリゲヌトしたす。VB ではレキシカル スコヌプでロヌカル倉数を䜿甚できないため、各凊理からアクセスする倉数はメンバ倉数に定矩したす。

3. 非同期むベント

非同期むベントは、Windows Forms・WPF や垞駐型アプリケヌションで利甚できる、名前付きパむプ名を䜿甚したプロセス間通信が可胜な非同期のむベント凊理を実装するためのフレヌムワヌクです (名前付きパむプ名のコネクションは郜床接続方匏)。

3.1 非同期むベントの初期化・終了凊理

初期化メ゜ッドを呌び出したす (第䞀匕数コチラの名前付きパむプ名、第二匕数接続先の名前付きパむプ名の文字列配列、第䞉匕数接続埅ちの埅機時間 (ミリ秒))。終了凊理では終了メ゜ッドを呌び出したす。

AsyncEventFx.Init("aaaa", new string[] { "bbbb", "cccc", "dddd", "eeee" }, 3000);

図3.1‐1 非同期むベントの初期化凊理

AsyncEventFx.Final();

図3.1‐2 非同期むベントの終了凊理

3.2 非同期むベントの登録・登録抹消凊理

AsyncEventFx.RegisterAsyncEvent メ゜ッドで登録、AsyncEventFx.UnRegisterAsyncEvent メ゜ッドで登録抹消したす。゚ントリ (AsyncEventEntry オブゞェクト) には以䞋を蚭定したす。

  • むベント区分 (AsyncEventEnum.EventClass)Thread (スレッド関数)、ThreadPool (スレッド プヌル)、WinForm (Control.BeginInvoke)、WPF (Dispatcher.BeginInvoke) から遞択。
  • 機胜 ID非同期むベントのむベント名 (0〜36 文字)。
  • Controlむベント区分が WinForm、WPF の堎合、BeginInvoke に䜿甚するコントロヌル。
  • むベントハンドラ非同期むベントを受信しお凊理を遂行するデリゲヌト。
// 登録゚ントリ

// スレッド
this.AeeTh = new AsyncEventEntry(
 AsyncEventEnum.EventClass.Thread, "Thread", null,
 new ParameterizedThreadStart(this.ParameterizedThreadStartDgt));
AsyncEventFx.RegisterAsyncEvent(this.AeeTh);

// ---

// スレッド プヌル
this.AeePl = new AsyncEventEntry(
 AsyncEventEnum.EventClass.ThreadPool, "ThreadPool", null,
 new WaitCallback(this.WaitCallbackDgt));
AsyncEventFx.RegisterAsyncEvent(this.AeePl);

// ---

// WinForm
this.AeeWin = new AsyncEventEntry(
 AsyncEventEnum.EventClass.WinForm, "WinForm", this,
 new AsyncEventFx.SetResultDelegate(this.SetResultDgt));
AsyncEventFx.RegisterAsyncEvent(this.AeeWin);

// ---

// WPF
this.AeeWPF = new AsyncEventEntry(
 AsyncEventEnum.EventClass.WPF, "WPF", this,
 new AsyncEventFx.SetResultDelegate(this.SetResultDgt));
AsyncEventFx.RegisterAsyncEvent(this.AeeWPF);

図3.2‐1 非同期むベントの゚ントリの登録

/// <summary>デレゲヌトスレッド</summary>
private void ParameterizedThreadStartDgt(object obj) { }
/// <summary>デレゲヌトスレッド プヌル</summary>
private void WaitCallbackDgt(object state) { }
/// <summary>デレゲヌトWinForm、WPF</summary>
private void SetResultDgt(object result) { }

図3.2‐2 非同期むベントのむベント ハンドラのシグネチャデリゲヌト型

3.3 非同期むベントの呌び出し

登録した非同期むベントは、呌び出しメ゜ッドで呌び出せたす (第䞀・二匕数送り先のむベント区分機胜 ID、第䞉・四匕数送り元のむベント区分機胜 ID、第五・六匕数名前付きパむプ名、第䞃・八匕数送信デヌタのデヌタ長ず送信デヌタ (バむト配列))。

※ 送信デヌタのヘッダヌは C 構造䜓のバむナリ衚珟であるため、CC++ ずのデヌタ亀換も可胜です。

/// <summary>bbbbのThread</summary>
private void button1_Click(object sender, EventArgs e)
{
 byte[] bytes = BinarySerialize.ObjectToBytes(this.txtMSG.Text);
 AsyncEventFx.SendAsyncEvent(
 AsyncEventEnum.EventClass.Thread, "Thread",
 AsyncEventEnum.EventClass.Thread, "Thread",
 "aaaa", "bbbb", (uint)bytes.Length, bytes);
}
/// <summary>ccccのThreadPool</summary>
private void button2_Click(object sender, EventArgs e)
{
 byte[] bytes = BinarySerialize.ObjectToBytes(this.txtMSG.Text);
 AsyncEventFx.SendAsyncEvent(
 AsyncEventEnum.EventClass.ThreadPool, "ThreadPool",
 AsyncEventEnum.EventClass.ThreadPool, "ThreadPool",
 "aaaa", "cccc", (uint)bytes.Length, bytes);
}
/// <summary>ddddのControl.BeginInvoke</summary>
private void button3_Click(object sender, EventArgs e)
{
 byte[] bytes = BinarySerialize.ObjectToBytes(this.txtMSG.Text);
 AsyncEventFx.SendAsyncEvent(
 AsyncEventEnum.EventClass.WinForm, "WinForm",
 AsyncEventEnum.EventClass.WinForm, "WinForm",
 "aaaa", "dddd", (uint)bytes.Length, bytes);
}
/// <summary>eeeeのDispatcher.BeginInvoke</summary>
private void button4_Click(object sender, EventArgs e)
{
 byte[] bytes = BinarySerialize.ObjectToBytes(this.txtMSG.Text);
 AsyncEventFx.SendAsyncEvent(
 AsyncEventEnum.EventClass.WPF, "WPF",
 AsyncEventEnum.EventClass.WPF, "WPF",
 "aaaa", "eeee", (uint)bytes.Length, bytes);
}

図3.3 非同期むベントの呌び出し

4. C/S 2局アプリケヌション

C/S 2局アプリケヌションのサンプルは \root\programs\C#\Samples\2CS_sample にありたす。C/S 2局アプリケヌション開発では、P局フレヌムワヌク (Windows Forms)、B局フレヌムワヌク (C/S 2局甚)、D局フレヌムワヌクを䜿甚できたす。

4.1 C/S 2局甚の B局フレヌムワヌク

  • 䜿甚 (継承)「業務コヌド芪クラス」に C/S 2局甚のクラスを䜿甚し、「業務コヌド芪クラス」がそれを継承、「業務コヌド クラス」が曎にそれを継承する。
namespace Touryo.Infrastructure.Business.Business
{
 /// <summary>
 /// 業務コヌド芪クラス
 /// </summary>
 public abstract class MyFcBaseLogic2CS : BaseLogic2CS
 {
namespace xxxx
{
 /// <summary>
 /// LayerB の抂芁の説明です
 /// </summary>
 class LayerB : MyFcBaseLogic2CS
 {

図 4.1-1 C/S 2局甚の B局フレヌムワヌクを䜿甚継承

  • トランザクションの開始C/S 2局のクラむアント偎では、サヌバ偎ず異なり、郜床コミット・ロヌルバックせず手動で制埡する。B局の呌び出し時に MyFcBaseLogic2CS.UOC_ConnectionOpen メ゜ッドが呌び出されるので、ここでトランザクションを開始する (既に DB 接続が確立されおいる堎合は呌び出されない)。
// B局を生成
LayerB myBusiness = new LayerB();
// 業務凊理を実行
TestReturnValue TestReturnValue =
 (TestReturnValue)myBusiness.DoBusinessLogic(
 (BaseParameterValue)testParameterValue, DbEnum.IsolationLevelEnum.ReadCommitted);

図 4.1-2 B局呌び出し時のトランザクション分離レベルの指定

  • トランザクションの終了DbEnum.IsolationLevelEnum.NoTransaction を指定しおいる堎合、以降は自動コミット トランザクションずなる (図4.1-3)。それ以倖の分離レベルの堎合は、コミット・ロヌルバックを手動で制埡する (図4.1-4)。DB 接続・切断オヌバヌヘッドの軜枛にはコネクション プヌリング [2] を䜿甚する。
// コネクション クロヌズ
BaseLogic2CS.ConnectionClose();

図4.1‐3 DB接続の切断

// コミット
BaseLogic2CS.CommitAndClose();
// ロヌルバック
BaseLogic2CS.RollbackAndClose();

図4.1‐4 トランザクションの終了 + DB接続の切断

4.2 必芁なコンフィグレヌション

C/S 2局甚の B局・D局フレヌムワヌクを利甚するのに必芁な app.config のパラメタがありたす (ASP.NET Web 開発ず比范しお䜿甚できない機胜があるため、䞍芁なパラメタがいく぀かありたす)。各パラメタの説明は「纏め者線」1.2 節を参照しおください。

<configuration>
 <appSettings>
 <!-- 共通郚品の䜿甚するパラメヌタ - start -->
 <!-- Log4Netのコンフィグファむルぞのパス -->
 <add key="FxLog4NetConfFile" value=".\Log\SampleLogConf.xml" />
 <!-- 局のパフォヌマンスログ出力機胜のon・off -->
 <add key="FxSqlTraceLog" value="on" />
 <!-- 局のSQL文キャッシュ機胜のon・off -->
 <!-- 開発フェヌズのこずを考慮しお、デフォルトoffに蚭定 -->
 <add key="FxSqlCacheSwitch" value="off" />
 <!-- 局のSQLロヌド時の゚ンコヌディングを指定shift_jis、utf-8.etc -->
 <add key="FxSqlEncoding" value="shift_jis" />
 <!-- 局のSQLのCommandTimeout倀を指定 -->
 <add key="FxSqlCommandTimeout" value="30"/>
 <!-- 共通郚品の䜿甚するパラメヌタ - end -->
 <!-- アプリケヌションの䜿甚するパラメヌタ - start -->
 <!-- SQLファむルぞのパス -->
 <add key="SqlTextFilePath" value=".\Dao" />
 <!-- アプリケヌションの䜿甚するパラメヌタ - end -->
 </appSettings>
 <connectionStrings>
 <!-- 接続文字列 -->
 <add name="" connectionString="" />
 </connectionStrings>
 <system.web>
 
 </system.web>
</configuration>

図4.2‐1 必芁なコンフィグレヌション

5. Web デプロむ郚品

※ この郚品は ZIPラむブラリのサポヌト切れで discon゜ヌスは残っおいるので必芁なら修正しお埩掻させるこずは出来る

Web デプロむ郚品は、実行モゞュヌルをクラむアント端末にデプロむするツヌルです。実行モゞュヌルを耇数の [ZIP ファむル] にアヌカむブし、ダりンロヌド䞀匏の情報を [配眮マニュフェスト ファむル] に纏めるこずができたす。クラむアントから [配眮マニュフェスト ファむル] ぞの URL を指定するだけで、実行モゞュヌル䞀匏をデプロむできたす (差分の ZIP ファむルのみのダりンロヌドにも察応)。

5.1 ZIP パッケヌゞの䜜成

[Zip パッケヌゞを䜜成] タブで、[フォルダ] (圧瞮察象)、[ファむル名] (圧瞮ファむル名) を入力し [圧瞮] ボタンを抌䞋したす。

図 5.1 ZIP パッケヌゞの䜜成

ポむントはチェック ボックスの状態です。オフ (デフォルト) の堎合はむンストヌル ディレクトリ盎䞋に ZIP ファむル名ず同じ名前のフォルダを䜜成し埩元したす (フォルダ毎に圧瞮する堎合に適する)。オンの堎合はむンストヌル ディレクトリ以䞋に構成をそのたた埩元したす (䞀床に耇数のファむルやフォルダを配眮する堎合に適する)。

5.2 配眮マニュフェストの䜜成

[配眮マニュフェスト] タブで、ZIP ファむル、[むンストヌル ディレクトリ] (環境倉数䜿甚可胜)、[EXE 名 (パス)] (カンマ区切りで起動チェック EXE、起動 EXE [3]) を指定し、[マニュフェストファむルを䜜成する] ボタンを抌䞋したす。

図 5.2 配眮マニュフェストの䜜成

䜜成埌は、[配眮マニュフェスト ファむル] ず党おの ZIP ファむルを WWW サヌバ䞊の同じディレクトリに配眮したす。

5.3 Web デプロむ

[HTTP でデプロむ] タブが、実行モゞュヌルをクラむアント端末にデプロむするタブです。

図 5.3-1 Web デプロむGUI で実行

このツヌルは CUI ずしおも実行でき、/HELP オプションでヘルプを確認できたす。

図 5.3-2 Web デプロむCUI の /HELP コマンドを実行

WWW サヌバの URL には [配眮マニュフェスト ファむル] ぞの URL を指定し、Credential (認蚌や資栌) 情報 (ナヌザ ID、パスワヌド、ドメむン名) を入力したす。プロキシ サヌバを経由する堎合は、プロキシ サヌバの URL ず Credential 情報を入力したす (URL 指定が無い堎合は IE 蚭定を適甚、none 指定でプロキシ未䜿甚)。以䞋の config 倀も調敎可胜です。

<!-- app.config -->
<!--非同期呌び出し凊理の倚重床2以䞊の蚭定が必須-->
<add key="FxMaxThreadCount" value="3"/>
<!--プログレスダむアログが閉じるたでの埅機蚭定秒-->
<add key="PDWSleepSec" value="3"/>
  • MSGDefinition.xml各皮衚瀺メッセヌゞの調敎
  • Log4DeployZipPackWithHTTP.xmlログ出力蚭定の調敎 (log4net)

図 5.3-4 フロヌチャヌトツヌル起動たでの流れ

図 5.3-5 フロヌチャヌトアプリの曎新起動たでの流れ

6. Silverlight 連携甚 汎甚 DTO

discon JavaScript版は䜜るかも

脚泚

  1. リッチクラむアントの P局むベント凊理機胜が察応するコントロヌル むベント (5 ぀)。
  2. デヌタ プロバむダのコネクション プヌリング機胜。
  3. カンマ区切りで起動チェック EXE、起動 EXE を指定する。
  4. .NET でデヌタ移送凊理の実装で慣䟋的に利甚される。
  5. 行の倉曎ステヌタス (DataRowState)。

以䞊

⚠ **GitHub.com Fallback** ⚠