• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
20080524
 

20080524

on

  • 1,589 views

 

Statistics

Views

Total Views
1,589
Views on SlideShare
1,589
Embed Views
0

Actions

Likes
0
Downloads
2
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • ※ 推奨印刷設定 A4 ・カラー印刷 ・ 配布資料・ 2 スライド / ページ ・ スライドに枠をつけない

20080524 20080524 Presentation Transcript

  • 2 日で学ぶ ASP.NET の基礎 Visual Studio User Group Web アプリケーションフォーラムリーダー         小野 修司 (どっとねっと ふぁん)                        2008/5/24 - 25
  • Agenda
  • Web アプリケーションの特徴
  • Web アプリケーションの特徴 「ブラウザ」と「サーバ」間のやりとりを繰り返して一連の処理を行う • ブラウザ • サーバにリクエストをあげる • サーバから受け取った HTML ( JavaScript を含む )を解釈してユーザインタフェースを表示する • サーバ • ブラウザから受け取ったリクエストに応じた処理を 行い、 HTML を組み立ててブラウザに返す • HTML というソースコードを生成している、と考え られる • 複数のブラウザからのリクエストを同時処理
  • Web アプリケーションの構築/デバッグに必要な知識 サーバ • Web サーバ、データベースサーバの設定/管 理 クライアント   • ブラウザによる実装の違い • HTML 、 CSS 、スクリプト ネットワーク • TCP/IP 、 http セキュリティ
  • http 基礎
  • http 基礎 サーバへのリクエストがあって、はじめてレスポン スが返る • サーバから一方的にデータを送りつけることはできない サーバはステート(前回のリクエスト状態等)を持 たない • ブラウザから次のリクエストが送られることを予期しない 利用されるメソッド • GET • ブラウザに URL を入力し、リターンキーを押したとき • 指定した URL に相当するページを返すようサーバに指示 • クエリ文字列を利用することで引数的にデータを渡せる • 文字数制限あり( IE 2,083 文字) • POST • 入力欄にデータを入力し、ボタン等を押したとき • 入力されたデータ等をサーバに渡す • 送信先ページは action で指定 • 文字数制限なし
  • 実習 1 -準備 Index.htm (新しい項目で追加) <html> <body> <form method="post" action="Default.aspx"> <input id="Text1" type="text" name="Text1" /> <input id="Submit1" type="submit" value=" 送信 " /> </form> </body> </html> Default.aspx • ラベル( Label1 )を追加 Default.aspx.cs protected void Page_Load(object sender, EventArgs e) { this.Label1.Text = Request.Form["Text1"]; }
  • 実習 1 telnet による動作確認 telnet> open   localhost ポート番号 GET / プロジェクト名 /Index.htm HTTP/1.1 Host: localhost • HTML が返される Trace による動作確認 • Default.aspx の Page ディレクティブ • Trace=“true” • 入力されたデータがリクエストに含まれる • 生成された HTML を確認
  • 実習 1 での理解 http による通信は文字列のやりとりである • ブラウザとサーバで共通のデータを扱うためにはその データを文字列化してリクエスト/レスポンスに含め る必要がある http による通信は必ずリクエストからはじまる ブラウザは HTML を解釈して画面表示を行う • サーバは HTML というソースコードを生成する • サーバ上でできる処理(ソースコード生成-文字列組 み立て)とブラウザでできる処理(画面表示変更)を 区別した設計が必要 ASP.NET も http の上になりたっている
  • ASP.NET の特徴
  • ASP.NET の特徴 PostBack が基本 • form タグの action 先が自分自身 • ASP 等では action 先を別のページにし、データ入力ペー ジとデータ処理ページを分けるのが一般的だった • イベントドリブン型の開発のための仕掛け コンパイルによる処理速度向上 • aspx ファイルはソースコード化されコンパイル • 最初の実行開始時に dll が作成される • ソースの修正等をしなければ dll はそのまま利用される • 実行時にメソッド単位で JIT コンパイルされるの は Windows アプリ等と同じ
  • 実習 2 -準備 Default.aspx • Trace=“true” • テキストボックス、ボタン、ラベルを追加 Default.aspx.cs protected void Button1_Click(object sender, EventArgs e) { Label1.Text = TextBox1.Text; }
  • 実習 2 初期表示時の要求の種類の確認 ソース/ HTML の確認 • form タグに注目 ボタンクリック後の要求の種類の確認 テンポラリーファイルの内容確認 • VISTA VS2008 • C:UsersUserNameAppDataLocalTempTemporary ASP.NET Files • VS2005 まで • C:WindowsMicrosoft.NETFrameworkv2.0.50727Temporary ASP.NET Files • d ll、ソースコード( debug 時)、その他
  • 実習 2 での理解 ASP.NET の基本は PostBack • runat=“server” が記されている form は Page に1つしか存在できず、必ず action が自分自 身になる からソースが自動生成され、コンパ aspx イルが行われる
  • ASP.NET の実行環境
  • 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 を指定する
  • IIS6 上の Web アプリケーション フォルダをアプリケーションとして「設定 」する • 仮想ディレクトリでも実フォルダでも可能 • 標準で仮想ディレクトリを追加すると、アプリケ ーションとして設定済みとなる • 仮想ディレクトリはアプリケーションとして設定 せず、単に実ディレクトリ構成とは異なるフォル ダ階層を実現するためにも利用可能 アプリケーションの設定とは • Windows アプリケーションの1つの exe ファイル と個々のアプリケーション設定が対応するイメー ジ • アプリケーションの境界 • Framework のバージョン セキュリティ/アクセス制御
  • IIS6 の認証と ASP.NET の認証 IIS 側でも認証設定が可能 • 匿名 • 基本認証 • 統合 Windows 認証 ASP.NET にも認証機能がある • Form 認証 • DB ベース • Active Directory ベース • Windwos 認証 ASP.NET の認証機能を利用するほうが細かい設 定が容易 • IIS 側は匿名を許可しておく
  • 開発サーバと IIS の違い VS2005 以降には開発サーバが含まれており 、その上で動作検証が可能 開発サーバと IIS では動作が異なる • ファイルマッピング • 開発サーバ - すべてのファイルが ASP.NET によって処 理される • IIS - アプリケーションの構成で ASP.NET に関連づけ られた拡張子のファイルのみ ASP.NET によって処理さ れる • 開発サーバでは web.config によるアクセス制御が画像フ ァイル等にも影響する • 実行ユーザ • 開発サーバ - ログイン中のユーザの権限で実行される • IIS - ASPNET ユーザまたは Network Service ユーザの 権限で実行される • ファイルへの書き込み等を行っている場合に注意
  • 実習 3 Default.aspx • ラベルを追加 Default.aspx.cs protected void Page_Load(object sender, EventArgs e) { Label1.Text = System.Security.Principal. WindowsIdentity.GetCurrent().Name; } 開発サーバと IIS で実行ユーザが異なることを確 認
  • IIS7 と ASP.NET ASP.NET を有効にすることで実行可能 IIS 7は ASP.NET をベースに進化したも のと考えてよい • ファイルはすべて ASP.NET によって処理され る • 実行ユーザは NT AUTHORITYNETWORK SERVICE • ASP.NET の設定と IIS7 の設定ツールが一体化 している • 一部 web.config の書き方が異なるので注意
  • ASP.NET の設定
  • ASP.NET の設定 マシン全体の設定 • C:WindowsMicrosoft.NETFrameworkv2.0.50727CONFIG • machine.config • web.config • デフォルトの設定については config に記述されていないものも • 初期起動時の速度を早くするため、ハードコーディングされている • ドキュメントにて確認できるものもある アプリケーション単位の設定 • アプリケーションとして設定されているフォルダに存在する web.config • 設定の種類によってはこの場所に記述しないと有効にならないもの がある • マシン全体の設定を引き継ぐ 下層のフォルダ単位の設定 • 各フォルダに存在する web.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 の CLR を利用する • ASP.NET では、 3.0 は 2.0 から何も変化がなかったため 通常利用しない • Ver 3.5 では言語のコンパイラが新しくなり、いく かの dll が追加された • web.config に追加された dll の参照と利用するコンパイラ の設定が追加される
  • リクエストが処理されるしくみ
  • リクエストが処理されるしくみ
  • 概要 ブラウザからリクエストがあがる http コンテキストが作られる アプリケーションイベントが発生する • アプリケーションイベントの発生順序は固定 • ページの処理が行われる • ページイベントが発生する • ページイベントの発生順序は固定 • ポストバック時はコントロールイベント、ポストバック イベントが発生する レスポンスが返される • ページ、 http コンテキストのインスタンスは破棄
  • HttpContext リクエストがあがってきてレスポンスを返すまで生存して いる • グローバル変数のような意味を持つインスタンスとなっている 以下のようなデータを格納 • リクエストの内容 • レスポンスの内容 • アプリケーションオブジェクト • セッションオブジェクト • キャッシュデータ • ユーザ情報 http コンテキストの内容を書き換えることで ASP.NET の 動作を変えることが可能 • 例: URL リライト • Context.Rewritepath 現在のコンテキストは HttpContext.Current で取得 • Page の中では Context プロパティで取得可能 • 独自クラスの中で HttpContext.Current を利用
  • アプリケーションイベント アプリケーションイベントの発生順序は固定 HttpApplication クラスのドキュメントで確認 BeginRequest リクエストの処理開始時に発生 AuthenticateRequest 認証の開始時に発生 PostAuthenticateRequest 認証の終了時に発生 AuthorizeRequest 承認の開始時に発生 PostAuthorizeRequest 承認の終了時に発生 ResolveRequestCache キャッシュの処理の開始時に発生 PostResolveRequestCache キャッシュの処理の終了時に発生 PostMapRequestHandler ハンドラの生成後に発生 AcquireRequestState セッション等の状態の取得時に発生 PostAcquireRequestState セッション等の状態の取得後に発生 PreRequestHandlerExecute ハンドラの実行前に発生 PostRequestHandlerExecute ハンドラの実行後に発生 ReleaseRequestState セッション等の状態の開放時に発生 PostReleaseRequestState セッション等の状態の開放後に発生 UpdateRequestCache キャッシュの状態更新時に発生 PostUpdateRequestCache キャッシュの状態更新後に発生 EndRequest リクエストの処理終了時に発生
  • 実習 4 -準備 Global.asax   void Application_BeginRequest(object sender, EventArgs e) { string t = "test"; } void Application_AuthenticateRequest(object sender, EventArgs e) { string t = "test"; } void Application_PostMapRequestHandler(object sender, EventArgs e) { string t = "test"; }
  • 実習 4 各イベント内にブレークポイントを設定 ウォッチウィンドウで HttpContext.Current のプロパティの状態 を確認 • User • Handler
  • 実習 4 での理解 アプリケーションイベントを通り抜けて いくことで HttpContext が変化していく ことを確認する ウォッチウィンドウでインスタンスの状 態を確認する方法を理解する
  • HttpModule アプリケーションイベントをトリガにし て実行する処理をまとめて登録するしく み IHttpModule インタフェースを継承した クラスで最低限 Init メソッドと Dispose メソッドを実装する • Init メソッド-アプリケーションイベントにプ ライベートメソッドを登録する • Dispose メソッド-通常は空でよい 作成したクラスを web.config で登録する
  • 実習 5 -準備 App_Code/TestModule.cs public class TestModule : IHttpModule { public void Init(HttpApplication context) { context.BeginRequest += new EventHandler(context_BeginRequest); context.EndRequest += new EventHandler(context_EndRequest); } public void Dispose() { }    void context_BeginRequest(object sender, EventArgs e) { HttpContext.Current.Items["startTime"] = DateTime.Now; }    void context_EndRequest(object sender, EventArgs e) { HttpContext.Current.Response.Write(       DateTime.Now.Subtract((DateTime)HttpContext.Current.Items["startTime"]).Milliseconds.ToString() ); } }
  • 実習 5 web.config <httpModules> <add name=“TestModule”   type="TestModule"/ > </httpModules> ページ最下段に処理にかかった時間数( ミリ秒)が表示される web.config の設定を消すと時間数は表示 されない
  • 実習 5 での理解 すべてのリクエストに対する処理を HttpModule で登録することができる web.config の設定で簡単に処理の組み込 みが可能
  • 実装済の 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 で実装されている
  • HttpModule の利用例 URL リライト • http://localhost/id/1/default.aspx ← ブラウザからのリクエ スト • http://localhost/default.aspx?id=1 ← 内部処理でのリクエス ト • DotNetNuke 等で実装 • SEO 対策、検索エンジン対策 • .NET Framework 3.5 SP1 で ASP.NET ルーティングが提供 され必要性は減少する IIS7 ではマッピングに制限されずすべてのリクエス トに対して HttpModule を適用できるようになるため 、利用を考慮する機会は増える
  • ページ毎の処理
  • ページ毎の処理
  • 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 に制御が渡されていることが前提
  • ashx ファイル もっともシンプルな IHttpHandler 実装 • IsReusable メソッド • false を返す • ProcessRequest • 処理を記述 • Context.Response にブラウザに返したいデータを 書き込む
  • 実習 6-1 test.ashx ファイルを追加 • サンプルコードが記述されている 実行して生成されるソース HTML を確認 • ashx ファイルでは書き込んだデータしか表示 されない
  • ashx の利用例 画像ファイルや文書ファイルのダウンロ ード時に ASP.NET の処理を追加したい 場合 • ダウンロード回数のカウント • 認証済みユーザにのみダウンロードを許可 出力する内容を完全にコントロールでき る • aspx ファイルを利用すると、意図しない出力 が追加される場合も
  • 実習 6-2 -準備 test.aspx ファイルを App_Code 下に移動 し、拡張子を .cs に変更する WebHandler ディレクティブを削除する web.config に追加 <httpHandlers> <add verb="*" path ="*.myx" type="test"/> </httpHandlers>
  • 実習 6-2 ブラウザから test.myx 、 hello.myx 等、 適当な名前の .myx ファイルにアクセスす る どの場合でも「 Hello World 」が返され ることを確認する
  • HttpHandler の利用例 静的表示の多いサイトでコンテンツと表現 を分離して管理する • コンテンツの内容を XML で作成 • Handler 内で XML に XSLT を適用し、 HTML を生 成 • XSLT の変更で生成される HTML は自由に変更可 能 • マイクロソフトサイトの mspx IIS6 上で利用するには拡張子のマッピング が必要 • IIS7 ではマッピングは必要ない
  • aspx ファイル System.Web.UI.Page クラスを継承 • IHttpHandler インターフェイスを継承している 内部に多くのコントロールを持つ • 通常ツールボックスからのドラッグ アンド ドロップで 追加 ページライフサイクル • ページのインスタンスはリクエスト毎に生成され消滅 する • 初期表示時のインスタンスとポストバック時のインスタンス に関連は存在しない(ステートレス) • ページが生成して消滅するまでにページイベントが決 まった順番で発生する
  • 実習 7-1 Default.aspx • Trace=“true” • テキストボックス、ボタン、ラベルを追加 Default.aspx.cs protected void Button1_Click(object sender, EventArgs e) { Label1.Text = TextBox1.Text; }
  • コントロールのツリー _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 終了タグ ソースコードで対応を確認
  • コントロールツリー aspx 内のすべての要素がコントロール化 され Page クラスを根とするツリー構造 内で管理される • 文字列 →  LiteralControl • ツリーの階層構造 = タグの階層構造
  • コントロールの種類 HTML コントロール • HTML ツールボックスからドラッグ アンド ドロップ • コントロールツリーでは LiteralControl となり、サーバ上のプログラムで制 御できない • 記述した内容そのままが HTML となる HTML サーバコントロール • HTML コントロールに runat=“server” を追加 • サーバ上のプログラムで制御可能 • 記述した内容がほぼそのまま HTML となる Web コントロール • 標準ツールボックスからドラッグ アンド ドロップ • サーバ上のプログラムで制御可能 • プロパティの状態によって生成される HTML が変わる • TextBox の TextMode ( SingleLine 、 Password 、 MultiLine ) • ViewState を利用し、ポストバック前後の自分の状態を保持する • カレンダー、データグリッドのように内部的にコントロールを持つ複合コン トロールも存在する
  • ページイベント  初期表示時  ポストバック時 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
  • ページイベントによる処理 初期化 コントロールツリーの作成 リクエスト読み込み • ポストバック時のみ • ビューステート、ポストデータを各コントロールに割り当て コントロールイベント • ポストバック時のみ • ビューステートとポストデータの違いからコントロールイベントが 発生 ポストバックイベント • ポストバック時のみ • ポストバックの原因となったイベントが発生 レンダリング • 各コントロールがプロパティの状態を元に自分自身を HTML 化し、 レスポンスに追加
  • AutoEventWireup ASP.NET 2.0 以降はデフォルトで true 下記のメソッド呼び出しがハードコーディングされており、該当するメソ ッドを作成しておけば自動的に呼び出される Page_PreInit Page_Init Page_InitComplete Page_Load Page_PreLoad Page_LoadComplete Page_PreRenderComplete Page_DataBind Page_PreRender Page_SaveStateComplete Page_Unload Page_Error Page_AbortTransaction OnTransactionAbort Page_CommitTransaction OnTransactionCommit これ以外のイベント発生時のメソッド呼び出しは初期化時に登録を行う必 要がある
  • 実習 7-2 -準備 Default.aspx <asp:TextBox ID="TextBox1" runat="server" ontextchanged="TextBox1_TextChanged"></ asp:TextBox> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" /> Default.aspx.cs   protected void Page_Load(object sender, EventArgs e) { Trace.Warn("Page_Load"); } protected void Button1_Click(object sender, EventArgs e) { Label1.Text = TextBox1.Text; Trace.Warn("Button1_Click"); } protected void TextBox1_TextChanged(object sender, EventArgs e) { Trace.Warn("TextBox1_TextChanged"); }
  • 実習 7-2 下記の状態でトレースを確認 • 初期表示 • テキストボックスに「 Hello 」と入力し、ボタンをクリック • テキストボックスを変更せず、ボタンをクリック • テキストボックスを「 Hello World 」に変更し、 Enter キー を入力 • テキストボックスを「 Hello 」に変更し、 Enter キーを入力 確認内容 • Page_Load は常に実行される • テキストボックスにはポストバック前のデータが表示される • ビューステートに含まれている • TextChanged はポストバック時に実行される • ビューステートの内容とフォームコレクションの値が異なるとき • ボタンをクリックしないと Button1_Click イベントは発生し ない • フォームコレクションに Button1 が表示されていない
  • 実習 7-3 Default.aspx <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True" ontextchanged="TextBox1_TextChanged"> </asp:TextBox> 確認内容 • 生成される HTML ソースに JavaScript の記述とそ の呼び出し部分が追加されている • テキストボックスの内容を変更し、カーソルを移 動するとポストバックが発生する • ポストバック時、 TextChanged が実行される
  • たまにある質問 その1 • Response.Write で書き込んだ内容がページの 先頭に書き込まれます その2 • DropDownList にデータバインディングでデー タを表示しています。 Page_Load で初期表示 値を設定したいんですができません
  • 実習 8 -準備 Default.aspx • ラベルを追加 Default.aspx.cs   protected void Page_Load(object sender, EventArgs e) { Label1.Text = " ロード時に設定 "; Response.Write("Page_Load"); } protected void Page_PreRender(object sender, EventArgs e) { Response.Write("Page_PreRender"); } protected void Page_SaveSateComplete(object sender, EventArgs e) { Response.Write("Page_SaveStateComplete"); }
  • 実習 8 での理解 Response.Write とページを含むコントロー ルの HTML 生成/書き込みタイミングが異 なる • Response.Write は呼び出されたタイミングで渡さ れたデータを httpContext が持つ Response に書き 込む • Page およびそれに含まれるコントロールは Render のタイミングで自分自身を HTML 化 し、 httpContext が持つ Response に書き込む • Render 終了後は Response.Write でデータを書き 込むことはできない 結論: Response.Write は Page の中では使 わない
  • 実習 9 -準備 id と dataName 項目を持つテーブルとデータを準備 Default.aspx • Trace=“true” • DropDownList を追加し、 SqlDataSource でバインディング Default.aspx.cs   protected void Page_Load(object sender, EventArgs e) { DropDownList1.SelectedValue = "3"; } protected void DropDownList1_DataBound(object sender, EventArgs e) { Trace.Warn("DataBound"); }
  • 実習 9 Page_Load 内で DropDownList.DataBind() を実行すると DataBound のタイミングが変わることを 確認する • デフォルトの実行は PreRender .NET Framework 3.5 ( SP1? )でこの問 題への対処が行われていると思われる • それ以前のバージョンではデータのバインデ ィング後でなければ SelectedValue 等が動か なかった
  • ASP.NET でのプログラミング作業とは Web アプリでのサーバの作業は HTML (文字列 )を組み立てること ASP.NET では各種コントロールを導入すること で直接文字列を組み立てることはなくなっている • どのような HTML を生成するかは個々のコントロール の責任 • コントロールはプロパティの値を元にそれに合わせた HTML を生成する • Render のタイミングまでにコントロールのプロパティ を適切に操作する作業が ASP.NET でのプログラミング 作業 • ページイベントを理解し、プロパティの操作に適切な タイミングを選択する必要がある
  • リクエストが処理される仕組み-まとめ• 一連の流れ(どのタイミングで何が起きているか )が理解できればフレームワーク自体を新たに作 ることも可能
  • ページ遷移
  • ページ遷移 ASP.NET の基本は PostBack であるため form タグによるページ遷移は難しい • HTML コントロールとしての form タグは利用 可能だが、 Web コントロールと組み合わせる と使い方が難しい 通常利用されるページ遷移の方法 • リンク • リダイレクト • トランスファー • 別ページポストバック
  • リンク ユーザのクリックにより指定先の URL を 表示 • リンク先が異なる Web アプリケーションでも 遷移が可能 • ASP.NET のサイトに限らない • GET メソッドを利用した遷移 • クエリ文字列を利用したデータの引渡しは可能 • URL の長さに制限あり
  • リダイレクト サーバの処理中にリダイレクトを記述する • 実際にはブラウザに対して指定した URL に GET メソッドを発行するよう指示するレスポン スが送られる • ブラウザとのやりとりが発生する • リンク先やリンク元が異なる Web アプリケー ションでも遷移が可能 • ASP.NET のサイトに限らない • GET メソッドを利用した遷移 • クエリ文字列を利用したデータの引渡しは可能 • URL の長さに制限あり
  • トランスファー サーバの処理中にトランスファーを記述す る • 実際には指定したページのインスタンスが生成さ れ、そのページの処理が開始される • トランスファーの遷移先は同一の Web アプリケー ション内に限定される • 1つのリクエストの処理の中で実行されるページ のインスタンスが置き換わるため、ブラウザの URL は遷移前のまま変わらない • 1 つのリクエストの処理の中で実行されるページ が置き換わるため、ページの認証、承認といった アプリケーションイベントは遷移前のページに対 して行われ、遷移後のページに対しては実行され ない 一般的には使わない
  • トランスファーのイメージ
  • 別ページポストバック ボタン、リンクボタン、イメージボタン の PostBackUrl オプションに遷移先を設 定する ボタンクリックにより指定した遷移先が 呼び出される • POST メソッドを利用した呼び出しが行われ る • JavaScript を利用して form のポスト先を書き 換えている • 遷移した先が同一 Web アプリケーションであ れば PreviousPageType ディレクティブを設 定して遷移元で公開しているプロパティの値 を取得可能
  • 実習 10 -準備 Default.aspx • テキストボックス、ボタンを追加 • ボタンの PostBackUrl プロパティに Default2.aspx を設定 Default.aspx.cs   public string MyText { get { return TextBox1.Text; } } Default2.aspx • Trace=“true” • <%@ PreviousPageType VirtualPath="~/Default.aspx" %> • ラベルを追加 Default2.aspx.cs   protected void Page_Load(object sender, EventArgs e) { Label1.Text = PreviousPage.MyText; }
  • 実習 10 Default.aspx でテキストボックスに何か 入力してボタンをクリック Default2.aspx に遷移することを確認 Default2.aspx でブレークポイントを設定 し、 PreviousPage の型を確認 Default2.aspx のメソッド、フォームコレ クションを確認
  • 実習 10 での理解 別ページポストバックで利用する JavaScript は WebResource.axd を介してダ ウンロードされる • JavaScript によって form の action が書き換えられ る • form のメソッドは post のまま POST には POST データ、 ViewState が含 まれる • PreviousPageType で指定されたページのインスタ ンスを生成し、そこに ViewState を読み込ませる ことにより Public なプロパティを取り出せるもの と思われる
  • ステート保持
  • ステート保持 Web アプリケーションの基本はステート レス • ページの遷移時だけでなく、ポストバック時 も以前の状態を保持できない アプリケーションとして一連の処理を実 行するためには様々な長さでステートを 保持できる必要がある • ポストバック間 • ページ遷移間 • ユーザが処理を行っている間 • アプリケーションが起動している間
  • ポストバック間でのステート保持 ViewState • Web コントロールはデフォルトで ViewState を利 用する • ページ単位、コントロール単位で制御可能 • プログラムから独自に利用することも可能 • 格納できるのはシリアライズ可能なオブジェクト • 取得時に型を設定する必要がある • データ量に注意する必要がある • DataGrid 等と SqlDataSource を組み合わせてページング /ソーティングを行っている場合、表示されるデータは 該当するページ内のものだが、 ViewState には抽出され たすべてのデータが含まれる • 通信量の増大が体感実行速度に影響
  • ページ遷移間でのステート保持 ページ遷移の方法によって利用できるもの が異なる • リンク:クエリ文字列 • リダイレクト:クエリ文字列 • トランスファー:クエリ文字 列、 HttpContext.Items • ページ間ポストバック: POST デー タ、 ViewState HttpContext.Items • IDictionary 型- key を設定して object を格納でき る • HttpContext はリクエストの処理の間を通じて存在 しており、トランスファー実行時のページ間での データの受け渡しが可能
  • ユーザが処理を行っている間でのステート保持 クッキー • ブラウザ側で値を保持 • リクエスト時に毎回ブラウザからサーバに送られる • 有効期間を設定可能 • ブラウザを閉じても存続させることが可能 • 格納できる長さに制限あり • ブラウザの設定によっては利用不可 セッションオブジェクト • デフォルトではセッションの判定(セッションキーを保持している)にクッ キーを利用 • デフォルトではサーバ上のメモリにデータを格納する • 格納できるデータはシリアライズ可能なもの • セッションキーを保持しているブラウザから一定期間アクセスがない場合に データは破棄される • http はブラウザからのリクエストではじめて処理が開始されるので、サーバ側で はリクエストを待っているしかない • Web.config で一定期間の設定を変更可能
  • セッション利用の設定変更 クッキーレス <system.web> <sessionState cookieless="UseUri"/> </system.web> • 携帯等クッキーを利用できないブラウザを想定する場合に設定 • セッションキーが URL に埋め込まれる データの保存場所 <system.web> <sessionState mode=“InProc"/> </system.web> • InProc • サーバ上のメモリ内に格納される • Session_OnEnd が発生するのはこの状態のみ • StateServer • 複数台のサーバがある場合、その中の一台のメモリ上に格納される • セッションを格納するサーバで StateServer のサービスを起動する必要がある • SQLServer • データベース上に格納される • aspnet_regsql.exe ツールを利用してセッション状態を保持するデータベースをインストールす る • セッションデータはアクセスがない状態で一定時間が経過したタイミングで削除される
  • アプリケーションが起動している間でのステート保持 アプリケーションオブジェクト • 格納できるデータはシリアライズ可能なもの • 書き込み時には競合に注意 • Application.Lock ()、 Application.UnLock() を利用する • Lock 、 UnLock はファイル書き込み等の排他制御に利用 することも可能 • 処理速度を低下させる場合もあるので利用には注意 • Web アプリケーションは一定時間リクエストをま ったく受け取らなかった場合に終了することに注 意 • http はブラウザからのリクエストではじめて処理が開始 されるので、サーバ側ではリクエストを待っているしか ない • Web.config で一定期間の設定を変更可能 • 次にリクエストを受け取ったときに起動が行われる
  • キャッシュ
  • キャッシュの種類 データキャッシュ • Cache オブジェクトにオブジェクトを追加する • Cache オブジェクトはアプリケーション全体で利 用可能 ページの部分キャッシュ • ユーザコントロールを作成し、 outputcache ディ レクティブを設定する ページキャッシュの部分更新 • Substitution コントロールを利用する ページキャッシュ • ページに outputcache ディレクティブを設定する • クエリ文字列毎にキャッシュを持つことが可能
  • キャッシュの生存期間 キャッシュの設定時に期間を指定 • データキャッシュ • 時間指定 • 依存関係指定 • ファイル、ディレクトリ、他のデータキャッシュ等 • キャッシュの項目削除時に通知を受けることも可能 • この機能を利用して、定期的な処理を組み込むこともで きる • ページキャッシュ • 時間指定 • SQL Server の特定テーブルの変更に依存させることも可 能 • aspnet_regsql.exe で設定 • キャッシュの配置位置をクライアント/サーバ/両方に 指定することも可能
  • キャッシュの利用にあたって どこの負荷を下げたいのかを考慮する • データベース/ Web サーバ/ネットワーク 表示の変更タイミングを考慮する • データの変更頻度 • ユーザ毎に異なる表示が必要か? 調整は必要
  • ASP.NET AJAX の基礎
  • 実習 11 -準備 Default.aspx • テキストボックス、ボタン、ラベルを追加 Default.aspx.cs   protected void Button1_Click(object sender, EventArgs e) { Label1.Text = TextBox1.Text; } 動作を確認後 Default.aspx に以下を追加 • ScriptManager • UpdatePanel • テキストボックス、ボタン、ラベルを UpdatePanel 内に移動
  • 実習 11 での理解 HTML ソースに WebResource.axd 、 ScriptResource.axd が 追加されている • ダウンロードされる js ファイルを VS2008 から確 認可能 • MicrosoftAjax.js • MicrosoftAjaxWebForm.js HTML の form 、 input type=“submit” 等が変 更されているわけではない • Submit は MicrosoftAjaxWebForms.js の _onFromSubmit に置き換えられる • Sys$WebForms$PageRequestManager$_onFormSubmit
  • ASP.NET AJAX とは ScriptManager を追加することによってダウンロ ードされる js ファイルをうまく利用するもの • JavaScript は後付け(上書き)でオブジェクトのプロ パティを追加したり、メソッドを書き換えたりするこ とができる • js ファイルそのものは IE 以外のブラウザへの対応もな されている • 独自の JavaScript を記述し、 AJAX の js ファイルを利 用することができる • ASP.NET AJAX Control Toolkit は Web コントロールと AJAX の js ファイルをうまく連携できるようにしてい るもの • http://www.asp.net/ajax/ajaxcontroltoolkit/ UpdatePanel は便利だが、それに限定されるもの ではない
  • メンバーシップ
  • 実習 12 Default.aspx • LoginStatus • LoginName • ChangePassword Loain.aspx • Login • CreateUserWizard Web サイト管理ツール • 認証の種類 - インターネットから • アクセス規則の作成 -トップディレクトリで匿 名ユーザを拒否
  • Web サイト管理ツール .NET Framework フォルダに存在する • C:WindowsMicrosoft.NETFrameworkv2.0.50727ASP.NET WebAdminFiles 設定は web.config を書き換える • 認証の種類 - インターネットから( Form 認証) • アクセス規則の作成 -トップディレクトリで匿名ユーザを 拒否 <system.web> <authentication mode="Forms"/> <authorization> <deny users="?"/> </authorization> </system.web> データベース( ASPNETDB.MDF )は自動的に生成 される サーバ上の Web サイト管理ツールを外部から利用す ることはできない
  • メンバーシップを理解するには 様々な設定を理解する必要がある • 認証設定 • 承認設定 • メンバーシップ設定 • メンバーシップ用 DB 設定
  • メンバーシップの基礎 認証と承認 • アプリケーションイベントとしてリクエストの処 理の初期に実行される 認証 • ユーザが誰かを確認する • ログイン後はログインチケットを元にユーザが確定され る • メンバーシップが有効になるのは Form 認証の設 定が行われている場合 承認 • ページへのアクセス権を確認する • ユーザ/ロールに対して許可/拒否を設定
  • 認証の設定 デフォルト値( authentication 要素のドキュメントで確認) <authentication mode="Windows"> <forms name=".ASPXAUTH" loginUrl="login.aspx" defaultUrl="default.aspx" protection="All" timeout="30" path="/" requireSSL="false" slidingExpiration="true" cookieless="UseDeviceProfile" domain="" enableCrossAppRedirects="false"> <credentials passwordFormat="SHA1" /> </forms> <passport redirectUrl="internal" /> </authentication> メンバーシップのための設定 <authentication mode=“Forms">
  • 承認の設定 設定例(未認証ユーザを拒否) <authorization> <deny users=“?” /> </authorization> 許可( allow )/拒否( deny ) すべてのユーザ(” *” ) / 未認証ユーザ(” ?” ) ロール名 / ユーザ名で個別に指定 適用順序が記述順であることに注意 • allow と deny の組み合わせがある場合に注意 <deny roles=“manager” /> <allow roles=“Admins” />   この設定を行った場合、 Admins と manager の双方に含まれるユーザは拒 否されてしまう フォルダ/ファイル単位で設定可能 • フォルダ毎に web.config を置いて設定できる • トップフォルダの web.config のみで設定を管理したい場合は Location 要素 を利用する
  • メンバーシップの設定 C:WindowsMicrosoft.NETFrameworkv2.0.50727CONFIGmachine.config <membership> <providers> <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false“ enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/> </providers> </membership> SqlMembershipProvider クラスを利用している それぞれの設定は SqlMembershipProvider のプロパティに対応
  • メンバーシッププロバイダ ユーザの認証情報を保存/取得する プロバイダを置き換えることで様々なデータストアに対応 • SqlMembershipProvider • SQL Server を利用 • ActiveDirectoryMembershipProvider • Active Direvtory を利用 • AccessProvider • Access を利用 • サンプルとして提供されている • http://msdn.microsoft.com/en-us/asp.net/aa336558.aspx 以前からメンバーシップ以外のプロバイダを含めてソース コードが公開されている • http://weblogs.asp.net/scottgu/archive/2006/04/13/442772.aspx 現在では Oracle もメンバーシッププロバイダを提供して いる
  • メンバーシップ用 DB 設定 C:WindowsMicrosoft.NETFrameworkv2.0.50727CONFIGmachine .config <connectionStrings> <add name="LocalSqlServer" connectionString=“ data source=.SQLEXPRESS; Integrated Security=SSPI; AttachDBFilename=|DataDirectory|aspnetdb.mdf; User Instance=true" providerName="System.Data.SqlClient"/> </connectionStrings> デフォルトでは SQL Server Express Edition を利用するものという 設定になっている 接続先データベースを変更するには LocalSqlServer の設定を書き換 える <connectionStrings> <remove name="LocalSqlServer"/> <add name="LocalSqlServer" connectionString=" 接続に必要なコネクション文字列 " providerName="System.Data.SqlClient"/> </connectionStrings>
  • メンバーシップ DB の構築 運用時には SQL Server 上に ASPNETDB を構築する 既存のデータベース上に必要なテーブル 、ストアドプロシージャを構築してもよ い • DB サーバに .NET Framework がインストール されていれば aspnet_regsql.exe を実行してウ ィザードで構築が可能 • テーブル等を生成する SQL スクリプトを作成 してもよい • aspnet_regsql.exe –sqlexportonly ファイル名 – A all –d データベース名
  • メンバーシップコントロール 組み合わせて利用する • Login ー アカウントとパスワードによる認 証 • CreateUserWizard ー ユーザの登録 • ChangePassword - パスワード変更 • PasswordRecovery - パスワードの再送 • LoginStatus - ログイン状態表示 • LoginName - ログイン名表示 • LoginView - ログイン状態に応じ表示内容を変 更 デザインのカスタマイズ • オートフォーマットの適用 • 各種プロパティによる変更 • テンプレートに変換すると細かい調整が可能
  • メンバーシップコントロールの表示項目 コントロールのプロパティと web.config の双方の調整が必要 例: CreateUserWizard コントロールか らメールと質問項目を削除 • コントロールの RequireEmail プロパティを False に • SqlMembershipProvider の以下の設定を確認 • requiresUniqueEmail - False • requiresQuestionAndAnswer - False
  • メンバーシップ利用時の注意点 applicationName 要素の指定 • デフォルト -  applicationName=“/” • Web アプリケーション毎に異なる値を指定す ることで 1 つの DB で複数の Web アプリケー ションのユーザを管理することが可能 • 逆に同じ設定をすることで複数の Web アプリ ケーションで同一のユーザ情報を管理するこ とが可能 サーバ上でユーザを管理する仕組みがな い • Web サイト管理ツールと同等の仕組みを実装 する • IIS7 では IIS の管理ツールに ASP.NET のユー
  • ロール
  • ロールの基礎 ロールとは • ユーザをグループ単位で認証/承認する仕組 み 認証 • ユーザをロールと関連付ける • ASP.NET による Windows 認証時、および Form 認証時にロールを有効にできる 承認 • ページへのアクセス権を確認する
  • ロールの設定 C:WindowsMicrosoft.NETFrameworkv2.0.50727CONFIGmachin e.config <roleManager> <providers> <add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> <add name="AspNetWindowsTokenRoleProvider" applicationName="/" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> </providers> </roleManager> SqlRoleProvider • データベース上にロールを作成/取得 WindowsTokenRoleProvider • ActiveDirectory からロールを取得
  • ロールの有効化 利用するための設定 • web.config の system.web 要素に以下を追加 <roleManager enabled=“true” /> Windows 認証時でも SqlRoleProvier を利用することは可能 • ユーザとロールの関連付けが必要 ロールを作成するには • IIS7 なら管理ツールから • IIS6 までだと Global.asax を利用する等 void Application_Start(object sender, EventArgs e) { if(!Roles.RoleExists("Administrator")) Roles.CreateRole("Administrator"); } ロールとユーザの関連付け • IIS7 なら管理ツールから • IIS6 だとプログラム上から設定 Roles.AddUsersToRole ( new string[] { “ ユーザ名” }, “Administrator”);
  • ロールの利用 フォルダ単位で web.config にて設定 • メンバーシップの承認と同じ ロールのアクセス権と Menu/TreeView を連携する(セキュリティトリ ミング)  ルート web.config <siteMap defaultProvider="XmlSiteMapProvider" enabled="true"> <providers> <add name="XmlSiteMapProvider" type ="System.Web.XmlSiteMapProvider" securityTrimmingEnabled="true" siteMapFile="Web.sitemap"/> </providers> </siteMap>  SiteMap ファイル <?xml version="1.0" encoding="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="Default.aspx" title="root"> <siteMapNode url=“AdminDefault.aspx” title=“Adminroot” description=“” roles=“Admin”   /> <siteMapNode url=“UserDefault.aspx” title=“Userroot” description=“” roles=“User” /> </siteMapNode> </siteMap>  SiteMapNode のすべてに url が設定されている必要がある
  • プロファイル
  • プロファイルの基礎 プロファイルとは • サイトに接続した利用者に関する任意の情報を保存/参照できる仕 組み • ログインとは関係なく利用することが可能 • IIS7 の管理ツールで管理が可能 プロファイルの設定 • C:WindowsMicrosoft.NETFrameworkv2.0.50727CONFIGmachin e.config <profile> <providers> <add name="AspNetSqlProfileProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> </providers> </profile>
  • 実習 13 Default.aspx • テキストボックス、ボタンを追加 • Web サイト管理ツールを起動し、 ASPNETDB.MDF を追加(セキュリティタブクリックで追加) Default.aspx.cs protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) TextBox1.Text = Profile.MyData; } protected void Button1_Click(object sender, EventArgs e) { Profile.MyData = TextBox1.Text; } web.config <system.web> <anonymousIdentification enabled="true"/>    <profile> <properties>    <add name="MyData" serializeAs="String" allowAnonymous="true"/> </properties>    </profile> </system.web>
  • プロファイルの活用 匿名ユーザとして登録されたデータを認証ユーザ に受け渡すことも可能 • Global.asax で public void Profile_OnMigrateAnonymous(object sender, ProfileMigrateEventArgs args) { ProfileCommon anonymousProfile = Profile.GetProfile(args.AnonymousID); Profile.BloodType = anonymousProfile.BloodType; } 永続化が可能 Session オブジェクトの代替となりうる • 型付けされたデータとしてプログラム上で利用可能 • データベース内では1つの項目に様々なデータが登録されてし まう点に注意が必要
  • コントロールカスタマイズ
  • 実習 14 Default.aspx • CheckBoxList を追加し、アイテムを適当に追加 App_Code/ListAdapter.cs using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.Adapters; public class ListAdapter:WebControlAdapter { protected override void Render(HtmlTextWriter writer) { ListControl targetControl = this.Control as ListControl; writer.WriteFullBeginTag("ul"); IRepeatInfoUser repeaterInfo = (IRepeatInfoUser)this.Control; for (int i = 0; i < targetControl.Items.Count; i++) { writer.WriteFullBeginTag("li"); repeaterInfo.RenderItem(ListItemType.Item, i, new RepeatInfo(), writer); writer.WriteEndTag("li"); } writer.WriteEndTag("ul"); } }
  • ControlAdapter の適用 App_Browsers/All.browser <browsers> <browser refID="Default"> <controlAdapters> <adapter controlType="System.Web.UI.WebControls.CheckBoxList" adapterType="ListAdapter" /> </controlAdapters> </browser> </browsers> 本来はブラウザの違いにより異なる HTML を生成させるた めの仕組み • browser ファイルの設定で、ここではすべての場合に Adapter を適 用するようにしている • コントロールの Render を解析する必要があるが、一からカスタム コントロールを作成するよりは手軽
  • Web アプリケーションプロジェ クト と Web サイトプロジェクト
  • 歴史的経緯 VS2003 までは Web アプリケーションプロジェクト のみ VS2005 では Web サイトプロジェクトのみ VS2005 SP1 で Web アプリケーションプロジェクト が追加される • VS2003 で作成したユーザコントロールが VS2005 にアップ グレードすると使えない、といった問題が発生していた • 細かくみると、 VS2003 までの Web アプリケーションプロ ジェクトと VS2005 SP1 以降のものは異なる点もある • Default.aspx.designer.cs 等 • Web サイトプロジェクトの仕組みが ASP.NET 2.0 の元々の ベースであり、その上に Web アプリケーションプロジェク トを組み立てている VWD では 2005 、 2008 とも Web サイトプロジェク トのみ • 2008 SP1 で Web アプリケーションプロジェクトが追加 • ASP.NET MVC 、 Silverlight プロジェクト対応
  • 何が違うのか? コンパイルのタイミング • Web アプリケーションプロジェクト • コードビハインドファイル、クラスファイル等のコードファイルをあらかじ めコンパイルし、その dll ファイルを bin フォルダに配置する必要がある(デ バッグ時のビルド) • aspx ファイルのみ実行時にコンパイルされる • Web サイトプロジェクト • すべてのファイルは実行時に一緒にコンパイルされる • デバッグ時のビルドではコンパイルエラーのチェックのみ行われる ファイル/フォルダ構成 • Web アプリケーションプロジェクト • すべてのファイルを表示ボタンがある • bin フォルダは通常非表示 • 特定のフォルダ構成を必要としない • Web サイトプロジェクト • クラスファイルは App_Code フォルダに配置 • 別に dll 化されたファイルを利用しない場合は bin フォルダは必要ない
  • こんな部分も違う 言語の混在 • Web アプリケーションプロジェクト • 不可 • Web サイトプロジェクト • 可 • クラスファイルについてはフォルダを分け、 web.config の compilation/codeSubDirectories セクションにフォルダ名を追加する クラスのインテリセンス追加のタイミング • Web アプリケーションプロジェクト • ビルド後 • Web サイトプロジェクト • ファイル保存後 階層型マスターページ • Web アプリケーションプロジェクト • トップのマスターページ、階層下のマスターページ、コンテンツ用のページ のテンプレートがそれぞれ分かれている • Web サイトプロジェクト • マスターページや Web ページを追加するときに上位のマスターページを指 定する
  • Web サイトプロジェクトにのみ必要な機能 プリコンパイル • aspnet_compiler.exe を利用して明示的に実行 • Web サイトの発行によって自動的に実行 • aspx ファイルを含め、すべてのファイルを dll 化 • aspx ファイルは中身のないファイルに • IIS の設定によってはファイルの存在が確認されるた め • プリコンパイル時の設定で aspx ファイルを残すこと も可能 • dll は bin フォルダに格納 • 初期起動時のコンパイルが行われないため、起動が 多少はやい • 配置先でソースの修正は不可に ソースの内容を見られることもない
  • ASP.NET TIPS
  • 開発サーバのポート番号固定 Web サービス等をテストする場合に便利 • プロジェクトのプロパティで動的ポートの使 用を false にする VS2005 では WebDev.WebServer.EXE をコマンドラインベースで利用する方法 もある • WebDev.WebServer /port:8080 /path: 物理パ ス
  • web.config の暗号化 セクション単位で暗号化が可能 元々のファイルが置き換えられる 暗号化してもプログラム中に変更はまっ たく必要ないaspnet_regiis -pef “connectionStrings” web.config ファイルがあるフォルダ App.Config に対しても、一時的にファイ ル名を web.config に書き換えれば対応可 能 • 利用するマシンで暗号化を行う必要がある
  • App_Offline.htm この名前のファイルを置くと Web アプリ ケーションの動作が停止 サイト内へのすべてのリクエストに対し て App_Offline.htm の内容が返される システム運用時の保守作業時等に有効 512 バイト以上の内容がないと IE がファ イル無しと判断してしまうため、コメン ト行等でバイト数を稼ぐ必要がある