「Open棟梁 wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
リダイレクトによる画面遷移、トランスファー(フォワード)による画面遷移から方式を選択する 。
ココでの画面遷移とは、サーバ上で強制的に次画面に遷移する場合の処理を指している。クライアントが、画面上のリンクなどを押下して遷移する画面遷移ではないので注意する。
リダイレクトによる画面遷移、トランスファー(フォワード)による画面遷移の双方に対応している。
ASP.NET WebForms? †
リダイレクト †
- 画面遷移は、「Response.Redirect」を使用する。「Server.Transfer」は使用しない。
- 画面跨りで使用するデータはSessionに格納する(「共通情報の持ち回り方式・画面間の情報持ち回り方式」を参照)。
※ 次項で説明する「Server.Transfer : トランスファー(フォワード)」は性能的に有利であるが、画面とURL・ASP.NETパイプライン処理が1対1に対応しない。
トランスファー(フォワード) †
- 画面遷移は、「Server.Transfer」を使用する。「Response.Redirect」は使用しない。
- 画面跨りで使用するデータはHTTPContextに格納する(「共通情報の持ち回り方式・画面間の情報持ち回り方式」を参照)。
ASP.NET MVC †
ASP.NET MVCは”ユルイ”フレームワークであるのでなんでもできてしまう。
従って、何か規則を決めないと、言及できないので、
URL - 画面 - MVCコンポーネントのセットが1対1に対応させたとする。
この場合、 ≒ ASP.NET Web Formsの設計が可能である。
MVCには、
- Html.BeginForm?
- Ajax.BeginForm?
の2つの方式があるので、これについて言及する。
Html.BeginForm? †
Ajax.BeginForm? †
画面間の情報持ち回り方式 †
リダイレクト時の情報の持ち回り †
画面遷移方式に「リダイレクト」を採用した場合の情報の持ち回り・状態管理方式テンプレート
Session †
- 使用者
基盤, 業務で使用可能。
- 使用方法
- 画面遷移の際に、次画面に引き渡すために使用する。
- 画面間複数の画面に渡って保持する情報のみ保持する。
- セッションの明示的な破棄、明示的なセッション タイムウトまで、
メモリ上のオブジェクトが破棄されないので注意して利用する。
Form (Hidden)、HttpContext? †
- 使用者
- 基盤, 業務で使用可能。
- ASP.NET MVCは、Formの分割が可能であるため、基盤利用が困難。
- 使用方法
- PostBack?のうちは、情報引継ぎが可能。
- リダイレクトでの画面遷移の間では情報を引き継げない。
- エラー画面遷移など特殊な画面遷移でのみ利用する。
ViewState? †
- 使用者
- 使用方法
- ASP.NET WebForms?の基盤で自動的に使用される。
- ASP.NET MVCでは使用できないので注意する。
- Hiddenで実装されるため、使用方法は上記Hiddenと変わらない。
- Base64エンコーディングが施されるが、暗号化はされない。
- EnableViewStateMac?プロパティを使用して、改ざん検知などをすることが可能。
QueryString? †
- 使用者
基盤, 業務で使用可能。
- 使用方法
- URLの後ろに不可するパラメタを使用して情報を受け渡す方式。
- Getによる画面遷移、Get・Postの両画面遷移に対応する場合に使用する。
- 使用する際はセキュリティ的に問題が無いか注意する。
Cookie †
- 使用方法
- SessionIDやForms認証の認証チケットなどで使用される。
- 基盤類の挙動をコントロールするときなどに使用することが多い。
- 業務(ユーザ・プログラム)で頻繁に書き換える情報ではなく、
基盤で使用するシステム共通引き継ぎ情報を持ち回るために使用する。
- 注意事項
- 使用する際はセキュリティ的に問題が無いか注意する。
- 携帯端末ではサポートされない機種があるので注意する。
Application、静的変数 †
- 注意事項
- 障害を引き起こす事があるのでユーザ プログラム側では使用しない方が良い。
- メモリリーク(タイムアウトが存在しない)
- スレッド競合(スレッドセーフではない)などによる結果不正。
TLS(Thread Local Storage) †
- 使用方法
当該スレット(≒リクエスト)で使用する情報を保存する。
- 注意事項
データの持ち回りを隠蔽(自動化)できるが、引数・戻り値の方が無難。
- 初期化処理の実装
- 2層から3層化した時のデータの持ち回り
Cache(System.Net.Cache) †
トランスファー(フォワード)時の情報の持ち回り †
画面遷移方式に「トランスファー(フォワード)」を採用した場合の情報の持ち回り・状態管理方式テンプレート
Session †
リダイレクトと同じ。
Form (Hidden)、HttpContext? †
リダイレクトと異なる点。
- トランスファー(フォワード)では画面遷移の間では情報を引き継げる。
- 1回のリクエスト ~ レスポンスで破棄されるため、問題を起こし難い。
- トランスファー(フォワード)で、Form (Hidden) ---> HttpContext?と繋ぐと、
SessionステートレスなWebアプリケーションを開発することができる。
ViewState? †
リダイレクトと同じ。
QueryString? †
リダイレクトと同じ。
Cookie †
リダイレクトと同じ。
Application、静的変数 †
リダイレクトと同じ。
TLS(Thread Local Storage) †
リダイレクトと同じ。
Cache(System.Net.Cache) †
リダイレクトと同じ。
TLS(Thread Local Storage) †
TLS(Thread Local Storage)については以下を参照。