Skip to content

OTR_StateManagement

nishi_74322014 edited this page Oct 27, 2026 · 1 revision

状態管理

概要

「どこに何を持たせるか」の地図。ASP.NET の状態管理方式と、Open 棟梁での置き場を纏める。
アプリ全体で共有する定数を持つ「共有情報取得機能」もここで扱う。

詳細

ASP.NET の状態管理方式

方式 用途・スコープ 注意
ViewState Web コントロールの状態の復元(同一画面のポストバック) Web Forms 専用。HTML が肥大する
Hidden / Form / Query String リクエスト単位で値を持ち回る 改ざんリスク(サーバで検証する)
Cookie セッション ID、認証チケット 改ざん・容量
Server.Transfer + HttpContext.Items 単一リクエスト内での持ち回り Web Forms 専用
Session ユーザ単位の状態(複数ページ) 資源消費。負荷分散では StateServer / SQL Server(直列化が必要)
Application / 静的変数 アプリ全体での共有 排他制御が必要。負荷分散では共有できない
Cache キャッシュ、マスタの保持 自動で破棄されるので、取得時に null チェックする

負荷分散(Web ファーム)

  • net48:web.config の <machineKey> を全ノードで統一する(ViewState・Session・認証チケットの暗号化と検証のため)。
  • net10.0:machineKey は無い。ASP.NET Core の Data Protection(AddDataProtection)の鍵をノード間で共有する。

Open 棟梁での置き場

持たせたいもの 置き場
ユーザ単位の状態 ブラウザ・ウィンドウ別/親画面別の Session 領域(Web Forms)
共通情報(ユーザ名、端末、権限) ユーザ情報クラス MyUserInfo。ログオン時に設定し、ASP.NET は Session、リッチクライアントはグローバル変数に持つ
レイヤ間の受け渡し 引数クラス・戻り値クラス(MyParameterValue / MyReturnValue の派生)。P → B → D へ引数で渡す
アプリ共通の定数 共有情報(SPDefinition.xml、下記)
レスポンスのキャッシュ無効化 FxCacheControl
複数のポストバックに跨る編集 Session に DataTable を保持(DataTable によるバッチ更新)

共有情報取得機能

アプリ全体で共有する値を、構成ファイルとは別の定義ファイルに持つ。appSettings との使い分けはプロジェクトで決める。

<SPD>
  <SharedProp key="HostName1" value="xxx.example.com"/>
</SPD>
using Touryo.Infrastructure.Framework.Util;

string v = GetSharedProperty.GetSharedPropertyValue("HostName1");
  • 定義ファイルのパスは設定 FxXMLSPDefinition で指定する。
  • key は XML の ID 型なので、先頭に数字を使えない。冒頭に DTD を埋め込む。

コーディング・エージェントに任せる場合

  • スキル opentouryo-app-design(references/state-management.md)と opentouryo-shared-property を使わせる。
  • エージェントは Session や静的変数に安易に状態を持たせがちなので、負荷分散を前提にレビューする。

参考


Tags: 再構築

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki
開発基盤部会 Wiki

移行管理: DONE / TODO

Clone this wiki locally