ASP.NETの仕組みあおい情報システムどっとねっとふぁん(http://dotnetfan.org/)        小野 修司
Webアプリケーションの特徴 「ブラウザ」と「サーバ」間でのやりとりを繰り返すことで 一連の処理を行う  ブラウザ    サーバにリクエストをあげる(リクエストの実態は文字列)    サーバから受け取ったHTML(JavaScriptを...
ASP.NETの特徴 PostBackが基本   formタグのaction先が自分自身      ASP等ではaction先を別のページにし、データ入力ペー       ジとデータ処理ページを分けるのが一般的だった   イベントドリブ...
ASP.NETの実行環境 IIS6まで  IISのインストール後、.NET Frameworkをイン   ストールする  逆になってしまった場合はaspnet_regiis.exeを   利用して修復可能  .NET Framework...
IIS6上のWebアプリケーション フォルダをアプリケーションとして「設定」する  仮想ディレクトリでも実フォルダでも可能  標準で仮想ディレクトリを追加すると、アプリケーショ   ンとして設定済みとなる  仮想ディレクトリはアプリケー...
IIS6の認証とASP.NETの認証 IIS側でも認証設定が可能  匿名  基本認証  統合 Windows 認証 ASP.NETにも認証機能がある  Form認証    DBベース    Active Directoryベース...
開発サーバとIISの違い VS2005以降には開発サーバが含まれており、その上で  動作検証が可能 開発サーバとIISでは動作が異なる  ファイルマッピング   開発サーバ - すべてのファイルがASP.NETによって処理され    る...
IIS7とASP.NET ASP.NETを有効にすることで実行可能 IIS7はASP.NETをベースに進化したものと  考えてよい  ファイルはすべてASP.NETによって処理される  実行ユーザはNT AUTHORITYNETWORK...
ASP.NETの設定 マシン全体の設定    C:WindowsMicrosoft.NETFrameworkv2.0.50727CONFIG      machine.config      web.config    デフォルトの設...
ASP.NET 2.0と3.5 web.configの違いでしかない  VS2008で対象となるFrameworkを変更すると、  web.configが書き換わる  .NET Framework 2.0、3.0、3.5はすべて2.0のC...
リクエストが処理されるしくみ
概要1. ブラウザからリクエストがあがる2. httpコンテキストが作られる3. アプリケーションイベントが発生する        アプリケーションイベントの発生順序は固定        ページの処理が行われる        ページイベン...
HttpContext   リクエストがあがってきてレスポンスを返すまで生存している       グローバル変数のような意味を持つインスタンスとなっている   以下のようなデータを格納       リクエストの内容       レスポ...
アプリケーションイベント   アプリケーションイベントの発生順序は固定   HttpApplicationクラスのドキュメントで確認     BeginRequest                リクエストの処理開始時に発生     Au...
HttpModule アプリケーションイベントをトリガにし  て実行する処理をまとめて登録するしく  み IHttpModuleインタフェースを継承したク  ラスで最低限InitメソッドとDisposeメソッ  ドを実装する  Initメ...
実装済のHttpModule マシンレベルのweb.configで登録   System.Web.Caching.OutputCacheModule   System.Web.SessionState.SessionStateModule  ...
ページ毎の処理
HttpHandlerの設定   マシンレベルのweb.config    <httpHandlers>     …     <add path="*.aspx" verb="*" type="System.Web.UI.PageHandle...
aspxファイル System.Web.UI.Pageクラスを継承   IHttpHandlerインターフェイスを継承している 内部に多くのコントロールを持つ   通常ツールボックスからのドラッグ アンド ドロップで追加 ページライフ...
動作サンプル Default.aspx   Trace=“true”をPageディレクティブに記述   テキストボックス、ボタン、ラベルを追加 Default.aspx.cs    protected void Button1_Clic...
コントロールのツリー _Page     LiteralControl       - DOCTYPE、HTMLタグ     HtmlHead             - headタグ       HtmlTitle          ...
コントロールツリー aspx内のすべての要素がコントロール化 されPageクラスを根とするツリー構造内 で管理される  文字列 → LiteralControl  ツリーの階層構造 = タグの階層構造
コントロールの種類   HTMLコントロール       HTMLツールボックスからドラッグ アンド ドロップ       コントロールツリーではLiteralControlとなり、サーバ上のプログラムで        制御できない   ...
ページイベント    初期表示時                        ポストバック時     Begin PreInit                 Begin PreInit     End PreInit         ...
ページイベントによる処理 初期化 コントロールツリーの作成 リクエスト読み込み    ポストバック時のみ    ビューステート、ポストデータを各コントロールに割り当て コントロールイベント    ポストバック時のみ    ビュー...
ASP.NETでのプログラミング作業とは Webアプリでのサーバの作業はHTML(文字列)を 組み立てること ASP.NETでは各種コントロールを導入することで 直接文字列を組み立てることはなくなっている  HTMLをどう生成するかは個々...
リクエストが処理されるしくみのおさらい
ページ遷移 ASP.NETの基本はPostBackであるためformタ  グによるページ遷移は難しい  HTMLコントロールとしてのformタグは利用可能     だが、Webコントロールと組み合わせると使い方     が難しい 通常利用...
リンク ユーザのクリックにより指定先のURLを表示  リンク先が異なるWebアプリケーションでも遷移  が可能   ASP.NETのサイトに限らない  GETメソッドを利用した遷移    クエリ文字列を利用したデータの引渡しは可能  ...
リダイレクト サーバの処理中にリダイレクトを記述する  Response.Redirect(”遷移先URL”);  実際にはブラウザに対して指定したURLにGET  メソッドを発行するよう指示するレスポンスが  送られる   ブラウザと...
トランスファー サーバの処理中にトランスファーを記述する  Server.Transfer(“遷移先URL”);  実際には指定したページのインスタンスが生成され、     そのページの処理が開始される    トランスファーの遷移先は同...
トランスファーのイメージ
別ページポストバック ボタン、リンクボタン、イメージボタンの  PostBackUrlオプションに遷移先を設定する ボタンクリックにより指定した遷移先が呼び  出される  POSTメソッドを利用した呼び出しが行われる  JavaScri...
ステート保持 Webアプリケーションの基本はステートレス  ページの遷移時だけでなく、ポストバック時も以  前の状態を保持できない アプリケーションとして一連の処理を実行す  るためには様々な長さでステートを保持でき  る必要がある  ...
ポストバック間でのステート保持 ViewState   WebコントロールはデフォルトでViewStateを利用   する     ページ単位、コントロール単位で制御可能   プログラムから独自に利用することも可能     格納できる...
ページ遷移間でのステート保持 ページ遷移の方法によって利用できるものが異  なる     リンク:クエリ文字列     リダイレクト:クエリ文字列     トランスファー:クエリ文字列、HttpContext.Items     ペー...
ユーザが処理を行っている間のステート保持   クッキー       ブラウザ側で値を保持       リクエスト時に毎回ブラウザからサーバに送られる       有効期間を設定可能         ブラウザを閉じても存続させることが可...
セッション利用の設定変更   クッキーレス        <system.web>          <sessionState cookieless="UseUri"/>        </system.web>       携帯等クッキ...
アプリケーションが起動している間のステート保持  アプリケーションオブジェクト   格納できるデータはシリアライズ可能なもの   書き込み時には競合に注意     Application.Lock()、Application.UnLoc...
まとめ ASP.NETは柔軟な拡張性を持ったフレーム  ワーク  HttpContext、HttpModule、HttpHandlerが理解でき   れば独自の拡張を施すことも可能  Dynamic Data、ASP.NET MVC等がよ...
Upcoming SlideShare
Loading in …5
×

20081003

768 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
768
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

20081003

  1. 1. ASP.NETの仕組みあおい情報システムどっとねっとふぁん(http://dotnetfan.org/) 小野 修司
  2. 2. Webアプリケーションの特徴 「ブラウザ」と「サーバ」間でのやりとりを繰り返すことで 一連の処理を行う  ブラウザ  サーバにリクエストをあげる(リクエストの実態は文字列)  サーバから受け取ったHTML(JavaScriptを含む)を解釈してユー ザインタフェースを表示する  サーバ  ブラウザから受け取ったリクエストに応じた処理を行い、HTMLを 組み立ててブラウザに返す  HTMLというソースコードを生成しているといえる  文字列(リクエスト)を受け取って文字列(HTML)を返す サーバの処理の本質は文字列操作といえる  複数のブラウザからのリクエストを同時に処理する サーバへのリクエストがあって、はじめてレスポンスが返る  サーバから一方的にデータを送りつけることはできない サーバはステート(前回のリクエスト状態等)を持たない  ブラウザから次のリクエストが送られることを予期しない
  3. 3. ASP.NETの特徴 PostBackが基本  formタグのaction先が自分自身  ASP等ではaction先を別のページにし、データ入力ペー ジとデータ処理ページを分けるのが一般的だった  イベントドリブン型の開発のための仕掛け コンパイルによる処理速度向上  aspxファイルはソースコード化されコンパイル  最初の実行開始時にdllが作成される  ソースの修正等をしなければdllはそのまま利用される  実行時にメソッド単位でJITコンパイルされるのは Windowsアプリ等と同じ
  4. 4. ASP.NETの実行環境 IIS6まで  IISのインストール後、.NET Frameworkをイン ストールする  逆になってしまった場合はaspnet_regiis.exeを 利用して修復可能  .NET Framework 2.0 以降をインストールする と、IISの管理ツールに.NET Frameworkのバー ジョン管理が追加される  Ver 1.1までの場合はaspnet_regiisにて管理  Ver 3.0、3.5での実行はVer2.0を指定する
  5. 5. IIS6上のWebアプリケーション フォルダをアプリケーションとして「設定」する  仮想ディレクトリでも実フォルダでも可能  標準で仮想ディレクトリを追加すると、アプリケーショ ンとして設定済みとなる  仮想ディレクトリはアプリケーションとして設定せず、 単に実ディレクトリ構成とは異なるフォルダ階層を実現 するためにも利用可能 アプリケーションの設定とは  Windowsアプリケーションの1つのexeファイルと個々の アプリケーション設定が対応するイメージ  アプリケーションの境界  Frameworkのバージョン  セキュリティ/アクセス制御
  6. 6. IIS6の認証とASP.NETの認証 IIS側でも認証設定が可能  匿名  基本認証  統合 Windows 認証 ASP.NETにも認証機能がある  Form認証  DBベース  Active Directoryベース  Form認証を簡単に利用できるコントロール群を提供  Windwos認証 ASP.NETの認証機能を利用するほうが細かい設定が容易  IIS側は匿名を許可しておく
  7. 7. 開発サーバとIISの違い VS2005以降には開発サーバが含まれており、その上で 動作検証が可能 開発サーバとIISでは動作が異なる  ファイルマッピング  開発サーバ - すべてのファイルがASP.NETによって処理され る  IIS - アプリケーションの構成でASP.NETに関連づけられた拡 張子のファイルのみASP.NETによって処理される  開発サーバではweb.configによるアクセス制御が画像ファイ ル等にも影響する  実行ユーザ  開発サーバ - ログイン中のユーザの権限で実行される  IIS - ASPNETユーザまたはNetwork Serviceユーザの権限で実 行される  ファイルへの書き込み等を行っている場合に注意
  8. 8. IIS7とASP.NET ASP.NETを有効にすることで実行可能 IIS7はASP.NETをベースに進化したものと 考えてよい  ファイルはすべてASP.NETによって処理される  実行ユーザはNT AUTHORITYNETWORK SERVICE  ASP.NETの設定とIIS7の設定ツールが一体化し ている  一部web.configの書き方が異なるので注意
  9. 9. ASP.NETの設定 マシン全体の設定  C:WindowsMicrosoft.NETFrameworkv2.0.50727CONFIG  machine.config  web.config  デフォルトの設定についてはconfigに記述されていないものも  初期起動時の速度を早くするため、ハードコーディングされている  ドキュメントにて確認できるものもある アプリケーション単位の設定  アプリケーションとして設定されているフォルダに存在する web.config  設定の種類によってはこの場所に記述しないと有効にならないもの がある  マシン全体の設定を引き継ぐ 下層のフォルダ単位の設定  各フォルダに存在するweb.config  アプリケーション単位のweb.config内に含めることも可能  上位フォルダの設定を引き継ぐ
  10. 10. ASP.NET 2.0と3.5 web.configの違いでしかない  VS2008で対象となるFrameworkを変更すると、 web.configが書き換わる  .NET Framework 2.0、3.0、3.5はすべて2.0のCLRを 利用する  ASP.NET では、3.0は2.0から何も変化がなかったため 通常利用しない  Ver 3.5では言語のコンパイラが新しくなり、いく かのdllが追加された  web.configに追加されたdllの参照と利用するコンパイ ラの設定が追加される
  11. 11. リクエストが処理されるしくみ
  12. 12. 概要1. ブラウザからリクエストがあがる2. httpコンテキストが作られる3. アプリケーションイベントが発生する  アプリケーションイベントの発生順序は固定  ページの処理が行われる  ページイベントが発生する  ページイベントの発生順序は固定  ポストバック時はコントロールイベント、ポスト バックイベントが発生する4. レスポンスが返される  ページ、httpコンテキストのインスタンスは破棄
  13. 13. HttpContext リクエストがあがってきてレスポンスを返すまで生存している  グローバル変数のような意味を持つインスタンスとなっている 以下のようなデータを格納  リクエストの内容  レスポンスの内容  アプリケーションオブジェクト  セッションオブジェクト  キャッシュデータ  ユーザ情報 httpコンテキストの内容を書き換えることでASP.NETの動作を変え ることが可能  例:URLリライト  Context.Rewritepath 現在のコンテキストはHttpContext.Currentで取得  Pageの中ではContextプロパティで取得可能  独自クラスの中でHttpContext.Currentを利用
  14. 14. アプリケーションイベント アプリケーションイベントの発生順序は固定 HttpApplicationクラスのドキュメントで確認 BeginRequest リクエストの処理開始時に発生 AuthenticateRequest 認証の開始時に発生 PostAuthenticateRequest 認証の終了時に発生 AuthorizeRequest 承認の開始時に発生 PostAuthorizeRequest 承認の終了時に発生 ResolveRequestCache キャッシュの処理の開始時に発生 PostResolveRequestCache キャッシュの処理の終了時に発生 PostMapRequestHandler ハンドラの生成後に発生 AcquireRequestState セッション等の状態の取得時に発生 PostAcquireRequestState セッション等の状態の取得後に発生 PreRequestHandlerExecute ハンドラの実行前に発生 PostRequestHandlerExecute ハンドラの実行後に発生 ReleaseRequestState セッション等の状態の開放時に発生 PostReleaseRequestState セッション等の状態の開放後に発生 UpdateRequestCache キャッシュの状態更新時に発生 PostUpdateRequestCache キャッシュの状態更新後に発生 EndRequest リクエストの処理終了時に発生 Global.asax内で個々のイベントにたいする処理を記述可能
  15. 15. HttpModule アプリケーションイベントをトリガにし て実行する処理をまとめて登録するしく み IHttpModuleインタフェースを継承したク ラスで最低限InitメソッドとDisposeメソッ ドを実装する  Initメソッド-アプリケーションイベントにプ ライベートメソッドを登録する  Disposeメソッド-通常は空でよい 作成したクラスをweb.configで登録する
  16. 16. 実装済のHttpModule マシンレベルのweb.configで登録 System.Web.Caching.OutputCacheModule System.Web.SessionState.SessionStateModule System.Web.Security.WindowsAuthenticationModule System.Web.Security.FormsAuthenticationModule System.Web.Security.PassportAuthenticationModule System.Web.Security.RoleManagerModule System.Web.Security.UrlAuthorizationModule System.Web.Security.FileAuthorizationModule System.Web.Security.AnonymousIdentificationModule System.Web.Profile.ProfileModule System.Web.Mobile.ErrorHandlerModule System.ServiceModel.Activation.HttpModule ASP.NETの基本的な動作はHttpModuleで実装されている IIS7のモジュールとしてHttpModuleを利用可
  17. 17. ページ毎の処理
  18. 18. HttpHandlerの設定 マシンレベルのweb.config <httpHandlers> … <add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="True"/> <add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="True"/> <add path="*.asmx" verb="*" type="System.Web.Services.Protocols.WebServiceHandlerFactory, System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="False"/> … <add path="*.cs" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/> … </httpHandlers> 拡張子をどのクラスが処理するかを設定  IISからASP.NETに制御が渡されていることが前提
  19. 19. aspxファイル System.Web.UI.Pageクラスを継承  IHttpHandlerインターフェイスを継承している 内部に多くのコントロールを持つ  通常ツールボックスからのドラッグ アンド ドロップで追加 ページライフサイクル  ページのインスタンスはリクエスト毎に生成され消滅する  初期表示時のインスタンスとポストバック時のインスタンス に関連は存在しない(ステートレス)  ページが生成して消滅するまでにページイベントが決まっ た順番で発生する
  20. 20. 動作サンプル Default.aspx  Trace=“true”をPageディレクティブに記述  テキストボックス、ボタン、ラベルを追加 Default.aspx.cs protected void Button1_Click(object sender, EventArgs e) { Trace.Warn("ボタンクリック時の処理"); Label1.Text = TextBox1.Text; }
  21. 21. コントロールのツリー _Page  LiteralControl - DOCTYPE、HTMLタグ  HtmlHead - headタグ  HtmlTitle - titleタグ  LiteralControl - bodyタグ  HtmlForm - formタグ  LiteralControl - divタグ  TextBox - テキストボックス  LiteralControl - 改行コード(CRLF)  Button - ボタン  LiteralControl - 改行コード + brタグ  Label - ラベル  LiteralControl - 改行コード + div終了タグ  LiteralContorl - body、html終了タグ ソースコードで対応を確認
  22. 22. コントロールツリー aspx内のすべての要素がコントロール化 されPageクラスを根とするツリー構造内 で管理される  文字列 → LiteralControl  ツリーの階層構造 = タグの階層構造
  23. 23. コントロールの種類 HTMLコントロール  HTMLツールボックスからドラッグ アンド ドロップ  コントロールツリーではLiteralControlとなり、サーバ上のプログラムで 制御できない  記述した内容そのままがHTMLとなる HTMLサーバコントロール  HTMLコントロールにrunat=“server”を追加  サーバ上のプログラムで制御可能  記述した内容がほぼそのままHTMLとなる Webコントロール  標準ツールボックスからドラッグ アンド ドロップ  サーバ上のプログラムで制御可能  プロパティの状態によって生成されるHTMLが変わる  TextBoxのTextMode(SingleLine、Password、MultiLine)  ViewStateを利用し、ポストバック前後の自分の状態を保持する  ViewStateとポストデータを比較し、イベントを発生させる  カレンダー、データグリッドのように内部的にコントロールを持つ複合 コントロールも存在する
  24. 24. ページイベント  初期表示時  ポストバック時 Begin PreInit Begin PreInit End PreInit End PreInit Begin Init Begin Init End Init End Init Begin InitComplete Begin InitComplete End InitComplete End InitComplete Begin LoadState End LoadState Begin ProcessPostData End ProcessPostData Begin PreLoad Begin PreLoad End PreLoad End PreLoad Begin Load Begin Load End Load End Load Begin ProcessPostData Second Try End ProcessPostData Second Try Begin Raise ChangedEvents End Raise ChangedEvents Begin Raise PostBackEvent End Raise PostBackEvent Begin LoadComplete Begin LoadComplete End LoadComplete End LoadComplete Begin PreRender Begin PreRender End PreRender End PreRender Begin PreRenderComplete Begin PreRenderComplete End PreRenderComplete End PreRenderComplete Begin SaveState Begin SaveState End SaveState End SaveState Begin SaveStateComplete Begin SaveStateComplete End SaveStateComplete End SaveStateComplete Begin Render Begin Render End Render End Render
  25. 25. ページイベントによる処理 初期化 コントロールツリーの作成 リクエスト読み込み  ポストバック時のみ  ビューステート、ポストデータを各コントロールに割り当て コントロールイベント  ポストバック時のみ  ビューステートとポストデータの違いからコントロールイベント が発生 ポストバックイベント  ポストバック時のみ  ポストバックの原因となったイベントが発生 レンダリング  各コントロールがプロパティの状態を元に自分自身をHTML化し、 レスポンスに追加
  26. 26. ASP.NETでのプログラミング作業とは Webアプリでのサーバの作業はHTML(文字列)を 組み立てること ASP.NETでは各種コントロールを導入することで 直接文字列を組み立てることはなくなっている  HTMLをどう生成するかは個々のコントロールの責任  コントロールはプロパティの値を元にそれに合わせた HTMLを生成する  Renderのタイミングまでにコントロールのプロパティを 適切に操作する作業がASP.NETでのプログラミング作業  ページイベント、コントロールイベントを理解し、プロ パティの操作に適切なタイミングを選択する必要がある
  27. 27. リクエストが処理されるしくみのおさらい
  28. 28. ページ遷移 ASP.NETの基本はPostBackであるためformタ グによるページ遷移は難しい  HTMLコントロールとしてのformタグは利用可能 だが、Webコントロールと組み合わせると使い方 が難しい 通常利用されるページ遷移の方法  リンク  リダイレクト  トランスファー  別ページポストバック
  29. 29. リンク ユーザのクリックにより指定先のURLを表示  リンク先が異なるWebアプリケーションでも遷移 が可能  ASP.NETのサイトに限らない  GETメソッドを利用した遷移  クエリ文字列を利用したデータの引渡しは可能  URLの長さに制限あり
  30. 30. リダイレクト サーバの処理中にリダイレクトを記述する  Response.Redirect(”遷移先URL”);  実際にはブラウザに対して指定したURLにGET メソッドを発行するよう指示するレスポンスが 送られる  ブラウザとのやりとりが発生する  リンク先やリンク元が異なるWebアプリケーション でも遷移が可能  ASP.NETのサイトに限らない  GETメソッドを利用した遷移  クエリ文字列を利用したデータの引渡しは可能  URLの長さには制限あり
  31. 31. トランスファー サーバの処理中にトランスファーを記述する  Server.Transfer(“遷移先URL”);  実際には指定したページのインスタンスが生成され、 そのページの処理が開始される  トランスファーの遷移先は同一のWebアプリケーション 内に限定される  1つのリクエストの処理の中で実行されるページのイ ンスタンスが置き換わるため、ブラウザのURLは遷移前 のまま変わらない  1つのリクエストの処理の中で実行されるページが置き 換わるため、ページの認証、承認といったアプリケー ションイベントは遷移前のページに対して行われ、遷 移後のページに対しては実行されない  一般的には使わない
  32. 32. トランスファーのイメージ
  33. 33. 別ページポストバック ボタン、リンクボタン、イメージボタンの PostBackUrlオプションに遷移先を設定する ボタンクリックにより指定した遷移先が呼び 出される  POSTメソッドを利用した呼び出しが行われる  JavaScriptを利用してformのポスト先を書き換えて いる  遷移した先が同一Webアプリケーションであれば PreviousPageTypeディレクティブを設定して遷移元 で公開しているプロパティの値を取得可能
  34. 34. ステート保持 Webアプリケーションの基本はステートレス  ページの遷移時だけでなく、ポストバック時も以 前の状態を保持できない アプリケーションとして一連の処理を実行す るためには様々な長さでステートを保持でき る必要がある  ポストバック間  ページ遷移間  ユーザが処理を行っている間  アプリケーションが起動している間
  35. 35. ポストバック間でのステート保持 ViewState  WebコントロールはデフォルトでViewStateを利用 する  ページ単位、コントロール単位で制御可能  プログラムから独自に利用することも可能  格納できるのはシリアライズ可能なオブジェクト  取得時に型を設定する必要がある  データ量に注意する必要がある  DataGrid等とSqlDataSourceを組み合わせてページン グ/ソーティングを行っている場合、表示される データは該当するページ内のものだが、ViewStateに は抽出されたすべてのデータが含まれる  通信量の増大が体感実行速度に影響
  36. 36. ページ遷移間でのステート保持 ページ遷移の方法によって利用できるものが異 なる  リンク:クエリ文字列  リダイレクト:クエリ文字列  トランスファー:クエリ文字列、HttpContext.Items  ページ間ポストバック:POSTデータ、ViewState HttpContext.Items  IDictionary型-keyを設定してobjectを格納できる  HttpContextはリクエストの処理の間を通じて存在して おり、トランスファー実行時のページ間でのデータの 受け渡しが可能
  37. 37. ユーザが処理を行っている間のステート保持 クッキー  ブラウザ側で値を保持  リクエスト時に毎回ブラウザからサーバに送られる  有効期間を設定可能  ブラウザを閉じても存続させることが可能  格納できる長さに制限あり  ブラウザの設定によっては利用不可 セッションオブジェクト  デフォルトではセッションの判定(セッションキーを保持している)にクッ キーを利用  デフォルトではサーバ上のメモリにデータを格納する  格納できるデータはシリアライズ可能なもの  セッションキーを保持しているブラウザから一定期間アクセスがない場合に データは破棄される  httpはブラウザからのリクエストではじめて処理が開始されるので、サーバ側 ではリクエストを待っているしかない  Web.configで一定期間の設定を変更可能
  38. 38. セッション利用の設定変更 クッキーレス <system.web> <sessionState cookieless="UseUri"/> </system.web>  携帯等クッキーを利用できないブラウザを想定する場合に設定  セッションキーがURLに埋め込まれる データの保存場所 <system.web> <sessionState mode=“InProc"/> </system.web>  InProc  サーバ上のメモリ内に格納される  Session_OnEndが発生するのはこの状態のみ  StateServer  複数台のサーバがある場合、その中の一台のメモリ上に格納される  セッションを格納するサーバでStateServerのサービスを起動する必要がある  SQLServer  データベース上に格納される  aspnet_regsql.exeツールを利用してセッション状態を保持するデータベースをインストールする  セッションデータはアクセスがない状態で一定時間が経過したタイミングで削除される
  39. 39. アプリケーションが起動している間のステート保持  アプリケーションオブジェクト  格納できるデータはシリアライズ可能なもの  書き込み時には競合に注意  Application.Lock()、Application.UnLock()を利用する  Lock、UnLockはファイル書き込み等の排他制御に利用す ることも可能  処理速度を低下させる場合もあるので利用には注意  Webアプリケーションは一定時間リクエストをまった く受け取らなかった場合に終了することに注意  httpはブラウザからのリクエストではじめて処理が開始さ れるので、サーバ側ではリクエストを待っているしかな い  Web.configで一定期間の設定を変更可能  次にリクエストを受け取ったときに起動が行われる
  40. 40. まとめ ASP.NETは柔軟な拡張性を持ったフレーム ワーク  HttpContext、HttpModule、HttpHandlerが理解でき れば独自の拡張を施すことも可能  Dynamic Data、ASP.NET MVC等がよい例 Webアプリケーションの本質は文字列操作で ある  ASP.NETはコントロール(クラス)を利用し、イ ベントドリブンでの開発を可能にしている  ASP.NETの仕組みが理解できていれば、生の文字 列操作レベルの細かい制御を組み込むことも可能

×