ASP.NET に入門する 2 日間  Visual Studio User Group  Web アプリケーションフォーラムリーダー          小野 修司 (どっとねっと  ふぁん)                          ...
Agenda
Web アプリケーションの特徴
Web アプリケーションの特徴 「ブラウザ」と「サーバ」間のやりとりを繰り返して一連の処理を行う • ブラウザ  • サーバにリクエストをあげる  • サーバから受け取った HTML ( JavaScript   を含む   )を   解釈し...
Web アプリケーションの構築/デバッグに必要な知識 サーバ • Web   サーバ、データベースサーバの設定/管  理 クライアント                       • ブラウザによる実装の違い   • HTML 、 CSS ...
http 基礎
http 基礎   サーバへのリクエストがあって、はじめてレスポン    スが返る    •   サーバから一方的にデータを送りつけることはできない   サーバはステート(前回のリクエスト状態等)を持    たない    •   ブラウザか...
http の動作を確認する   telnet による動作確認        telnet > open   localhost ポート番号        GET / プロジェクト名 / Index.htm HTTP / 1.1        ...
ASP.NET の特徴
ASP.NET の特徴 PostBack   が動作の基本  • form   タグの action 先が自分自身    •   ASP 等では action 先を別のページにし、データ入力ペ        ージとデータ処理ページを分けるのが...
ASP.NET の動作を確認する サンプルプログラム • Default.aspx   • Page ディレクティブに Trace = “true” を追加   • テキストボックス、ボタン、ラベルを追加 • Default.aspx.cs ...
確認してみる内容   初期表示時の要求の種類の確認    •   トレースで表示される   ソース/ HTML の確認    •   プラウザからソースを表示    •   form タグに注目   ボタンクリック後の要求の種類の確認  ...
ASP.NET の実行環境( IIS )
ASP.NET の実行環境 IIS6    まで  • IISのインストール後、 .NET Framework を    インストールする  • 逆になってしまった場合は aspnet_regiis.exe    を利用して修復可能  • ....
IIS6 上の Web アプリケーション   フォルダをアプリケーションとして「設定」する    •   仮想ディレクトリでも実フォルダでも可能    •   標準で仮想ディレクトリを追加すると、アプリケーシ        ョン       ...
IIS6 の認証と ASP.NET の認証   IIS 側でも認証設定が可能    •   匿名    •   基本認証    •   統合 Windows 認証   ASP.NET にも認証機能がある    •   Form 認証    ...
開発サーバと IIS の違い   VS2005 以降には開発サーバが含まれており、    その上で動作検証が可能   開発サーバと IIS では動作が異なる    •   ファイルマッピング        • 開発サーバ - すべてのファイ...
IIS7 と ASP.NET   ASP.NET を有効にすることで実行可能   IIS7 は ASP.NET をベースに進化したものと    考えてよい(統合モード)    •   ファイルはすべて ASP.NET によって処理される  ...
ASP.NET の開発環境
Visual Studio と .NETFramework   Visual Studio .NET     •   .NET Framework 1.0     •   Web アプリケーションプロジェクト   Visual Studio...
無料で利用できる開発環境   Visual Web Developer 2008 Express Edition    with SP1        • http://www.microsoft.com/japan/msdn/vstudio...
Web アプリケーションプロジェ        クト         と  Web サイトプロジェクト
何が違うのか?   コンパイルのタイミング    •   Web アプリケーションプロジェクト        •   コードビハインドファイル、クラスファイル等のコードファイルをあらかじ            め            コンパ...
こんな部分も違う   言語の混在    •   Web アプリケーションプロジェクト        •   不可    •   Web サイトプロジェクト        •   可        •   クラスファイルについてはフォルダを分け...
Web サイトプロジェクトにのみ必要な機能   プリコンパイル    • aspnet_compiler.exe を利用して明示的に実行    • Web サイトの発行によって自動的に実行    • aspx ファイルを含め、すべてのファイル...
ASP.NET の設定
ASP.NET の設定   マシン全体の設定    •   C:WindowsMicrosoft.NETFrameworkv2.0.50727CONFIG         •   machine.config         •   web....
ASP.NET 2.0 と 3.5   web.config の違いでしかない    • VS2008 で対象となる Framework を変更すると      、 web.config が書き換わる    • .NET Framework ...
リクエストが処理されるしくみ
リクエストが処理されるしくみ
概要   ブラウザからリクエストがあがる   http コンテキストが作られる   アプリケーションイベントが発生する    • アプリケーションイベントの発生順序は固定    • ページの処理が行われる      • ページイベントが発...
HttpContext   リクエストがあがってきてレスポンスを返すまで生存して    いる    •   グローバル変数のような意味を持つインスタンスとなっている   以下のようなデータを格納    •   リクエストの内容    •  ...
アプリケーションイベントの種類   HttpApplication クラスのドキュメントで確認      BeginRequest                リクエストの処理開始時に発生      AuthenticateRequest ...
アプリケーションイベント   イベントの発生順序は固定    •   必ず同じ順序で発生する   すべてのリクエストに対してイベントが発生    •   認証/承認等の処理はすべてのリクエストに対して        行われる   Glob...
重要なアプリケーションイベント   認証    • 接続しているユーザがだれかを設定する   承認    • 接続しているユーザにページへのアクセス権が     あるかを確認する   ハンドラの実行    • aspx ページの実行   ...
アプリケーションイベントとHttpContext   イベントにブレークポイントを設定    •   BeginRequest    •   AuthenticateRequest    •   PostMapRequestHandler ...
ページ毎の処理
ページ毎の処理
HttpHandler の設定   マシンレベルの web.config    <httpHandlers>     …     <add path="*.aspx" verb="*" type="System.Web.UI.PageHand...
ashx ファイル   もっともシンプルな IHttpHandler 実装    •   IsReusable メソッド         •   false を返す    •   ProcessRequest         •   処理を記...
aspx ファイル   System.Web.UI.Page クラスを継承    •   IHttpHandler インターフェイスを継承している   内部に多くのコントロールを持つ    •   通常ツールボックスからのドラッグ アンド ...
ページイベント     初期表示時                        ポストバック時      Begin PreInit                 Begin PreInit      End PreInit      ...
AutoEventWireup   ページイベントに対する処理を簡単に記述するための仕組み   ASP.NET 2.0 以降はデフォルトで true    •   Page ディレクティブに記述されている   下記のメソッド呼び出しがハー...
ページイベントによる処理(初期表示)   Get メソッドによるアクセス   初期化   内部のコントロールを含む    コントロールツリーの作成   レンダリング    • 各コントロールがプロパティの状態を元に     自分自身を ...
コントロールのツリー   _Page    • LiteralControl     - DOCTYPE 、 HTML タグ    • HtmlHead           - head タグ        • HtmlTitle      ...
コントロールツリー   aspx 内のすべての要素がコントロール    化    され Page クラスを根とするツリー構造    内で管理される    • 文字列 →  LiteralControl    • ツリーの階層構造 = タグの階...
ページイベントによる処理(ポストバック)   Post メソッドによるアクセス   初期化   内部のコントロールを含むコントロールツリーの作成   リクエスト読み込み    •   ビューステート、ポストデータを各コントロールに割り当...
リクエストが処理される仕組み-まとめ• 一連の流れ(どのタイミングで何が起きているか )が理解できれば、フレームワーク自体を新たに 作ることも可能( ASP.NET MVC はその実例)
ページ遷移
ページ遷移の位置づけ   ASP.NET の基本は PostBack である    • 一連の処理は   1 ページ内で完結させるほうが     実装が楽      • 入力 → 入力確認表示 → 登録/登録確認表示    • ページの遷移は...
リンク   ユーザのクリックにより指定先の URL    を表示    • リンク先が異なる       Web アプリケーションでも     遷移が可能      • ASP.NET   のサイトに限らない    • GET   メソッドを...
リダイレクト   サーバの処理中にリダイレクトを記述する    • Response.Redirect(“ 遷移先 URL ")    • 実際にはブラウザに対して指定した URLに     GET メソッドを発行するよう指示するレスポン  ...
トランスファー   サーバの処理中にトランスファーを記述する    •   Server.Transfer(“ 遷移先 URL ")    •   実際には指定したページのインスタンスが生成され、そのページの        処理が開始される ...
トランスファーのイメージ
別ページポストバック   ボタン、リンクボタン、イメージボタンの    PostBackUrl オプションに遷移先を設定す    る   ボタンクリックにより指定した遷移先が    呼び出される    • POST メソッドを利用した呼び出...
ステート保持
ステート保持   Web アプリケーションの基本はステート    レス    • ページの遷移時だけでなく、ポストバック時     も     以前の状態を保持できない   アプリケーションとして一連の処理を    実行するためには、様々な...
ポストバック間でのステート保持   ViewState    • Webコントロールはデフォルトで ViewState を      利用する       • ページ単位、コントロール単位で制御可能    • プログラムから独自に利用すること...
ページ遷移間でのステート保持   ページ遷移の方法によって利用できるものが異な    る    • リンク:クエリ文字列    • リダイレクト:クエリ文字列    • トランスファー:クエリ文字      列、 HttpContext.It...
ユーザが処理を行っている間でのステート保持   クッキー    •   ブラウザ側で値を保持    •   リクエスト時に毎回ブラウザからサーバに送られる    •   有効期間を設定可能        •   ブラウザを閉じても存続させるこ...
セッション利用の設定変更   クッキーレス        <system.web>           <sessionState cookieless="UseUri"/>        </system.web>    •   携帯等クッ...
アプリケーションが起動している間でのステート保持   アプリケーションオブジェクト    • 格納できるデータはシリアライズ可能なもの    • 書き込み時には競合に注意      • Application.Lock ()、 Applica...
キャッシュ
キャッシュの種類   データキャッシュ    • Cache   オブジェクトにオブジェクトを追加する    • Cache   オブジェクトはアプリケーション全体で利      用可能   ページの部分キャッシュ    • ユーザコントロ...
キャッシュの生存期間   キャッシュの設定時に期間を指定    • データキャッシュ     • 時間指定     • 依存関係指定        • ファイル、ディレクトリ、他のデータキャッシュ等     • キャッシュの項目削除時に通知を...
キャッシュの利用にあたって   どこの負荷を下げたいのかを考慮する    • データベース/ Web   サーバ/ネットワーク   表示の変更タイミングを考慮する    • データの変更頻度    • ユーザ毎に異なる表示が必要か?   ...
コントロールの基礎
コントロールの種類   HTML コントロール    •   HTML ツールボックスからドラッグ アンド ドロップ    •   コントロールツリーでは LiteralControl となり、サーバ上のプログラムで制御できな        ...
Web コントロールの動作を確認する   Default.aspx     <asp:TextBox ID="TextBox1" runat="server" ontextchanged="TextBox1_TextChanged"></  ...
いくつかの状態を確認   下記の状態でトレースを確認    •   初期表示    •   テキストボックスに「 Hello 」と入力し、ボタンをクリック    •   テキストボックスを変更せず、ボタンをクリック    •   テキストボッ...
AutoPostBack で何が起きるのか   Default.aspx    <asp:TextBox ID="TextBox1" runat="server"      AutoPostBack="True"    ontextchang...
プロパティの変更と HTML 生成   プログラムによるプロパティ変更    protected void Button1_Click(object sender, EventArgs     e)      {        Label1....
ASP.NET でのプログラミング作業とは   Web アプリでのサーバの作業は HTML (文字列)を    組み立てること   ASP.NET では各種コントロールを導入することで    直接文字列を組み立てることはなくなっている   ...
検証コントロール
検証コントロールの種類   RequiredFieldValidator    •   必須入力チェック   RangeValidator    •   範囲チェック   ReqularExpressionValidator    •  ...
検証コントロールの使い方   1 つのコントロールに必要なチェック項目    毎に検証コントロールを追加する    • 必須入力チェックと正規表現チェックなど      • 例:メールアドレス必須入力   ValidationSummary...
データアクセスの基礎
データベースの準備   項目の追加からデータベースを追加    •   テーブル、各項目の追加/編集も VS 上から可能   開発にのみ利用し、運用環境は別に用意する    •   追加されるデータベースは Express Edition ...
データ操作用のコントロール   GirdView     •   Grid 形式でのデータの表示/編集/削除が可能     •   データの追加はサポートしていない   DetailsView     •   単票形式でのデータの表示/編集...
データの接続を管理するDataSource   SqlDataSource    •   SQL Server に接続する   AccessDataSource    •   Access に接続する   ObjectDataSoure ...
データ操作の基本   データ操作用コントロールと DataSource を関連づ    ける    •   ウィザードからの設定で簡単なデータ操作はプログラム完了        •   応用できるようにするためには、生成されるタグの意味を  ...
データ操作をカスタマイズするには   コントロールツリーを確認する   コントロールイベントの発生タイミングを確認す    る    •   DataBinding 、 RowCreated など   TemplateField に変換す...
データ操作コントロール利用時の注意点   ViewState の肥大化    •   SqlDataSource のページング/ソーティングは        すべてのデータを ViewState に保持することで実現されて        いる...
データ操作参考情報   GridView と DetailsView でデータ管理ページを作成    する    •   http://codezine.jp/article/detail/379/   ASP.NET 備忘録(どっとねっと...
メンバーシップ
コーディングレスでページ認証   Default.aspx    • LoginStatus    • LoginName    • ChangePassword   Login.aspx    • Login    • CreateUse...
Web サイト管理ツール   .NET Framework フォルダに存在する    •   C:WindowsMicrosoft.NETFrameworkv2.0.50727ASP.NET        WebAdminFiles   設...
メンバーシップの基礎   認証と承認    • アプリケーションイベントとして     リクエストの処理の初期に実行される   認証    • ユーザが誰かを確認する     • ログイン後はログインチケットを元にユーザが確定され     ...
認証の設定   デフォルト値( authentication 要素のドキュメントで確認)    <authentication mode="Windows">      <forms        name=".ASPXAUTH"      ...
承認の設定   設定例(未認証ユーザを拒否)    <authorization>       <deny users=“?” />    </authorization>   許可( allow )/拒否( deny )   すべてのユ...
メンバーシップの設定   C:WindowsMicrosoft.NETFrameworkv2.0.50727CONFIGmachine.config     <membership>        <providers>          <...
メンバーシッププロバイダ   ユーザの認証情報を保存/取得する   プロバイダを置き換えることで様々なデータストアに対応     • SqlMembershipProvider        • SQL Server を利用     • A...
メンバーシップ用 DB 設定   C:WindowsMicrosoft.NETFrameworkv2.0.50727CONFIGmachine    .config    <connectionStrings>       <add name...
メンバーシップ DB の構築   運用時には SQL Server 上に ASPNETDB    を構築する   既存のデータベース上に必要なテーブル、    ストアドプロシージャを構築してもよい    • DB  サーバに .NET Fr...
メンバーシップコントロール   組み合わせて利用する    •   Login              - アカウントとパスワードによる認        証    •   CreateUserWizard   -   ユーザの登録    •...
メンバーシップコントロールの表示項目   コントロールのプロパティと web.config    の    双方の調整が必要   例: CreateUserWizard コントロールか    ら    メールと質問項目を削除    • コン...
メンバーシップ利用時の注意点   applicationName 要素の指定    • デフォルト -  applicationName = “/”    • Web アプリケーション毎に異なる値を指定するこ        とで 1 つの D...
ロール
ロールの基礎   ロールとは    • ユーザをグループ単位で認証/承認する仕組     み   認証    • ユーザをロールと関連付ける    • ASP.NET による Windows 認証時、および     Form 認証時にロール...
ロールの設定   C:WindowsMicrosoft.NETFrameworkv2.0.50727CONFIGmachin    e.config    <roleManager>       <providers>         <ad...
ロールの有効化   利用するための設定    •   web.config の system.web 要素に以下を追加         <roleManager enabled=“true” />   Windows 認証時でも SqlRo...
ロールの利用   フォルダ単位で web.config にて設定    •    メンバーシップの承認と同じ   ロールのアクセス権と Menu / TreeView を連携する(セキュリティト    リミング)        ルート w...
ユーザコントロール
ユーザコントロールとは   いくつかのコントロールをまとめて 1 つのコントロ    ールのように扱うための仕組み    •   ascx   ファイル上にコントロールを配置し、処理を記述    •   ascx   ファイルのドラッグ アン...
マスターページ
マスターページとは   主にサイトの外観を統一するために利用される仕    組み    •   フレームとは異なる    •   仕組みとしては特殊なユーザコントロールと考えたほう        がよい        • 読み込まれる各 as...
ASP.NET AJAX の基礎
UpdatePanel による簡単 AJAX   Default.aspx    •    テキストボックス、ボタン、ラベルを追加   Default.aspx.cs          protected void Button1_Clic...
何が起きているのか   HTML ソースに    WebResource.axd 、 ScriptResource.axd が追加されてい    る    •   ダウンロードされる js ファイルを VS2008 から確認可能       ...
ASP.NET AJAX とは   ScriptManager を追加することによってダウンロードされ    る    js ファイルをうまく利用するもの    •   JavaScript は後付け(上書き)でオブジェクトのプロパティを追 ...
ASP.NET の最新状況
   Dynamic Data ( 3.5 SP1 )    •   データ管理システムをコーディングレスで構築    •   LINQ to SQL 、 Entity Framework に対応   ADO.NET Data Servic...
Upcoming SlideShare
Loading in …5
×

20090328

3,062 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,062
On SlideShare
0
From Embeds
0
Number of Embeds
89
Actions
Shares
0
Downloads
11
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

20090328

  1. 1. ASP.NET に入門する 2 日間 Visual Studio User Group Web アプリケーションフォーラムリーダー         小野 修司 (どっとねっと ふぁん)                        2009/3/28 - 29
  2. 2. Agenda
  3. 3. Web アプリケーションの特徴
  4. 4. Web アプリケーションの特徴 「ブラウザ」と「サーバ」間のやりとりを繰り返して一連の処理を行う • ブラウザ • サーバにリクエストをあげる • サーバから受け取った HTML ( JavaScript を含む )を 解釈してユーザインタフェースを表示する • サーバ • ブラウザから受け取ったリクエストに応じた処理を 行い、 HTML を組み立ててブラウザに返す • HTML というソースコードを生成している、と考え られる
  5. 5. Web アプリケーションの構築/デバッグに必要な知識 サーバ • Web サーバ、データベースサーバの設定/管 理 クライアント   • ブラウザによる実装の違い • HTML 、 CSS 、スクリプト ネットワーク • TCP / IP 、 http セキュリティ
  6. 6. http 基礎
  7. 7. http 基礎 サーバへのリクエストがあって、はじめてレスポン スが返る • サーバから一方的にデータを送りつけることはできない サーバはステート(前回のリクエスト状態等)を持 たない • ブラウザから次のリクエストが送られることを予期しない 利用されるメソッド • GET • ブラウザに URL を入力し、リターンキーを押したとき • 指定した URL に相当するページを返すようサーバに指示 • クエリ文字列を利用することで引数的にデータを渡せる • 文字数制限あり( IE 2,083 文字) • POST • 入力欄にデータを入力し、ボタン等を押したとき • 入力されたデータ等をサーバに渡す • 送信先ページは action で指定 • 文字数制限なし
  8. 8. http の動作を確認する telnet による動作確認 telnet > open   localhost ポート番号 GET / プロジェクト名 / Index.htm HTTP / 1.1 Host: localhost • HTML が返される http による通信は文字列のやりとりである • ブラウザとサーバで共通のデータを扱うためにはデータを文字列化して リクエスト/レスポンスに含める必要がある http による通信は必ずリクエストからはじまる ブラウザは HTML を解釈して画面表示を行う • サーバは HTML というソースコードを生成する • サーバ上でできる処理(ソースコード生成-文字列組み立て)とブラウザで できる処理(画面表示変更)を区別した設計が必要 ASP.NET も http の上になりたっている
  9. 9. ASP.NET の特徴
  10. 10. ASP.NET の特徴 PostBack が動作の基本 • form タグの action 先が自分自身 • ASP 等では action 先を別のページにし、データ入力ペ ージとデータ処理ページを分けるのが一般的だった • イベントドリブン型の開発のための仕掛け コンパイルによる処理速度向上 • aspx ファイルはソースコード化されコンパイル • 最初の実行開始時に dll が作成される • ソースの修正等をしなければ dll はそのまま利用される • 実行時にメソッド単位で JIT コンパイルされるの は Windows アプリ等と同じ
  11. 11. ASP.NET の動作を確認する サンプルプログラム • Default.aspx • Page ディレクティブに Trace = “true” を追加 • テキストボックス、ボタン、ラベルを追加 • Default.aspx.cs protected void Button1_Click(object sender, EventArgs e) { Label1.Text = TextBox1.Text; }
  12. 12. 確認してみる内容 初期表示時の要求の種類の確認 • トレースで表示される ソース/ HTML の確認 • プラウザからソースを表示 • form タグに注目 ボタンクリック後の要求の種類の確認 • トレースで表示される テンポラリーファイルの内容を確認 • VISTA VS2008 • C:UsersUserNameAppDataLocalTempTemporary ASP.NET Files • VS2005 まで • C:WindowsMicrosoft.NETFrameworkv2.0.50727Temporary ASP.NET Files • d ll、ソースコード( debug 時)、その他
  13. 13. ASP.NET の実行環境( IIS )
  14. 14. 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 を指定する
  15. 15. IIS6 上の Web アプリケーション フォルダをアプリケーションとして「設定」する • 仮想ディレクトリでも実フォルダでも可能 • 標準で仮想ディレクトリを追加すると、アプリケーシ ョン として設定済みとなる • 仮想ディレクトリはアプリケーションとして設定せず 、 単に実ディレクトリ構成とは異なるフォルダ階層を実 現するためにも利用可能 アプリケーションの設定とは • Windows アプリケーションの 1 つの exe ファイル と 個々のアプリケーション設定が対応するイメージ • アプリケーションの境界 • Framework のバージョン • セキュリティ/アクセス制御
  16. 16. IIS6 の認証と ASP.NET の認証 IIS 側でも認証設定が可能 • 匿名 • 基本認証 • 統合 Windows 認証 ASP.NET にも認証機能がある • Form 認証 • DB ベース • Active Directory ベース • Windows 認証 ASP.NET の認証機能を利用するほうが 細かい設定が容易 • IIS 側は匿名を許可しておく
  17. 17. 開発サーバと IIS の違い VS2005 以降には開発サーバが含まれており、 その上で動作検証が可能 開発サーバと IIS では動作が異なる • ファイルマッピング • 開発サーバ - すべてのファイルが ASP.NET によって処理さ れる • IIS - アプリケーションの構成で ASP.NET に関連づけられ た 拡張子のファイルのみ ASP.NET によって処理される • 開発サーバでは web.config によるアクセス制御が 画像ファイル等にも影響する • 実行ユーザ • 開発サーバ - ログイン中のユーザの権限で実行される • IIS - ASPNET ユーザまたは Network Service ユーザの 権限で実行される • ファイルへの書き込み等を行っている場合に注意
  18. 18. IIS7 と ASP.NET ASP.NET を有効にすることで実行可能 IIS7 は ASP.NET をベースに進化したものと 考えてよい(統合モード) • ファイルはすべて ASP.NET によって処理される • 実行ユーザは NT AUTHORITYNETWORK SERVICE • ASP.NET の設定と IIS7 の設定ツールが一体化してい る • 一部 web.config の書き方が異なるので注意 IIS6 と同様の動作をさせるためには クラッシックモードを選択 アプリケーションの設定は IIS7 でも必要
  19. 19. ASP.NET の開発環境
  20. 20. Visual Studio と .NETFramework Visual Studio .NET • .NET Framework 1.0 • Web アプリケーションプロジェクト Visual Studio .NET 2003 • .NET Framework 1.1 • Web アプリケーションプロジェクト Visual Studio 2005 • .NET Framework 2.0 • Web サイトプロジェクト Visual Studio 2005 SP1 • .NET Framework 2.0 • Web サイトプロジェクト/ Web アプリケーションプロジェクト Visual Studio 2008 • .NET Framework 2.0 • .NET Framework 3.0 • .NET Framework 3.5 • Web サイトプロジェクト/ Web アプリケーションプロジェクト
  21. 21. 無料で利用できる開発環境 Visual Web Developer 2008 Express Edition with SP1 • http://www.microsoft.com/japan/msdn/vstudio/express/ • 商用利用可 • 開発用サーバが含まれ、 IIS がなくても開発可能 • .NET Framework 3.5 SP1 に対応 • Web サイトプロジェクト、 Web アプリケーショ ン プロジェクトの両方に対応( 2008 SP1 から) • 機能的な制限は他の手段でなんらかの対応が可能 • 別マシン上のデータベースサーバに接続不可 • .NET Framework 2.0/3.0 を対象としたプロジェクト構成 なし • テストプロジェクトの利用不可 • Visual Souce Safe への連携なし
  22. 22. Web アプリケーションプロジェ クト と Web サイトプロジェクト
  23. 23. 何が違うのか? コンパイルのタイミング • Web アプリケーションプロジェクト • コードビハインドファイル、クラスファイル等のコードファイルをあらかじ め コンパイルし、その dll ファイルを bin フォルダに配置する必要がある (デバッグ時のビルド) • aspx ファイルのみ実行時にコンパイルされる • Web サイトプロジェクト • すべてのファイルは実行時に一緒にコンパイルされる • デバッグ時のビルドではコンパイルエラーのチェックのみ行われる ファイル/フォルダ構成 • Web アプリケーションプロジェクト • すべてのファイルを表示ボタンがある • bin フォルダは通常非表示 • 特定のフォルダ構成を必要としない • Web サイトプロジェクト • クラスファイルは App_Code フォルダに配置 • 別に dll 化されたファイルを利用しない場合は bin フォルダは必要ない
  24. 24. こんな部分も違う 言語の混在 • Web アプリケーションプロジェクト • 不可 • Web サイトプロジェクト • 可 • クラスファイルについてはフォルダを分け、 web.config の compilation / codeSubDirectories セクションにフォルダ名を追加する クラスのインテリセンス追加のタイミング • Web アプリケーションプロジェクト • ビルド後 • Web サイトプロジェクト • ファイル保存後 階層型マスターページ • Web アプリケーションプロジェクト • トップのマスターページ、階層下のマスターページ、コンテンツ用のページの テンプレートがそれぞれ分かれている • Web サイトプロジェクト • マスターページや Web ページを追加するときに上位のマスターページを指定す る
  25. 25. Web サイトプロジェクトにのみ必要な機能 プリコンパイル • aspnet_compiler.exe を利用して明示的に実行 • Web サイトの発行によって自動的に実行 • aspx ファイルを含め、すべてのファイルを dll 化 • aspx ファイルは中身のないファイルに • IIS の設定によってはファイルの存在が確認されるため • プリコンパイル時の設定で aspx ファイルを残すこと も可能 • dll は bin フォルダに格納 • 初期起動時のコンパイルが行われないため、 起動が多少はやい • 配置先でソースの修正は不可に • ソースの内容を見られることもない
  26. 26. ASP.NET の設定
  27. 27. ASP.NET の設定 マシン全体の設定 • C:WindowsMicrosoft.NETFrameworkv2.0.50727CONFIG • machine.config • web.config • デフォルトの設定については config に記述されていないものもある • 初期起動時の速度を早くするため、ハードコーディングされている • ドキュメントにて確認できるものもある アプリケーション単位の設定 • アプリケーションとして設定されているフォルダ(ルートフォルダ)に存在 する web.config • 設定の種類によってはルートフォルダに記述しないと有効にならないものが ある • マシン全体の設定を引き継ぐ 下層のフォルダ単位の設定 • 各フォルダに存在する web.config • アプリケーション単位の web.config 内に含めることも可能 • 上位フォルダの設定を引き継ぐ
  28. 28. 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 の参照と利用するコンパイ ラの設定が追加される • 3.5 SP1 は dll の追加と考えてよい
  29. 29. リクエストが処理されるしくみ
  30. 30. リクエストが処理されるしくみ
  31. 31. 概要 ブラウザからリクエストがあがる http コンテキストが作られる アプリケーションイベントが発生する • アプリケーションイベントの発生順序は固定 • ページの処理が行われる • ページイベントが発生する • ページイベントの発生順序は固定 • ポストバック時はコントロールイベント、ポストバック イベントが発生する レスポンスが返される • ページ、 http コンテキストのインスタンスは破棄
  32. 32. HttpContext リクエストがあがってきてレスポンスを返すまで生存して いる • グローバル変数のような意味を持つインスタンスとなっている 以下のようなデータを格納 • リクエストの内容 • レスポンスの内容 • アプリケーションオブジェクト • セッションオブジェクト • キャッシュデータ • ユーザ情報 http コンテキストの内容を書き換えることで ASP.NET の 動作を変えることが可能 • 例: URL リライト • Context.Rewritepath 現在のコンテキストは HttpContext.Current で取得 • Page の中では Context プロパティで取得可能 • 独自クラスの中で HttpContext.Current を利用
  33. 33. アプリケーションイベントの種類 HttpApplication クラスのドキュメントで確認 BeginRequest リクエストの処理開始時に発生 AuthenticateRequest 認証の開始時に発生 PostAuthenticateRequest 認証の終了時に発生 AuthorizeRequest 承認の開始時に発生 PostAuthorizeRequest 承認の終了時に発生 ResolveRequestCache キャッシュの処理の開始時に発生 PostResolveRequestCache キャッシュの処理の終了時に発生 PostMapRequestHandler ハンドラの生成後に発生 AcquireRequestState セッション等の状態の取得時に発生 PostAcquireRequestState セッション等の状態の取得後に発生 PreRequestHandlerExecute ハンドラの実行前に発生 PostRequestHandlerExecute ハンドラの実行後に発生 ReleaseRequestState セッション等の状態の開放時に発生 PostReleaseRequestState セッション等の状態の開放後に発生 UpdateRequestCache キャッシュの状態更新時に発生 PostUpdateRequestCache キャッシュの状態更新後に発生 EndRequest リクエストの処理終了時に発生
  34. 34. アプリケーションイベント イベントの発生順序は固定 • 必ず同じ順序で発生する すべてのリクエストに対してイベントが発生 • 認証/承認等の処理はすべてのリクエストに対して 行われる Global.asax に記述することでイベント発生時に 独自の処理を組み込める • いくつかの処理を組み合わせて登録する HttpModule という仕組みも存在する • 認証/承認等の処理はデフォルトで組み込まれている HttpModule により行われている
  35. 35. 重要なアプリケーションイベント 認証 • 接続しているユーザがだれかを設定する 承認 • 接続しているユーザにページへのアクセス権が あるかを確認する ハンドラの実行 • aspx ページの実行 • ashx 、 asmx 、 svc 等もこの仕組みにより実行
  36. 36. アプリケーションイベントとHttpContext イベントにブレークポイントを設定 • BeginRequest • AuthenticateRequest • PostMapRequestHandler ウォッチウィンドウで HttpContext.Current の 以下のプロパティの状態を確認 • User • Handler アプリケーションイベントを通り抜けてい くことで HttpContext が変化する
  37. 37. ページ毎の処理
  38. 38. ページ毎の処理
  39. 39. 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 に制御が渡されていることが前提 • この設定により、各種ページが呼び出される • 存在しているファイルを呼び出さない設定も可能( HttpForbiddenHandler )
  40. 40. ashx ファイル もっともシンプルな IHttpHandler 実装 • IsReusable メソッド • false を返す • ProcessRequest • 処理を記述 • Context.Response にブラウザに返したいデータを書き込む 画像ファイルや文書ファイルのダウンロード時に ASP.NET の処理を追加したい場合等に利用できる • ダウンロード回数のカウント • 認証済みユーザにのみダウンロードを許可 出力する内容を完全にコントロールできる • aspx ファイルを利用すると、意図しない出力が追加される場合も
  41. 41. aspx ファイル System.Web.UI.Page クラスを継承 • IHttpHandler インターフェイスを継承している 内部に多くのコントロールを持つ • 通常ツールボックスからのドラッグ アンド ドロップで 追加 ページライフサイクル • ページのインスタンスはリクエスト毎に生成され消滅 する • 初期表示時のインスタンスとポストバック時のインスタンス に 関連は存在しない(ステートレス) • ページが生成して消滅するまでにページイベントが 決まった順番で発生する
  42. 42. ページイベント  初期表示時  ポストバック時 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
  43. 43. AutoEventWireup ページイベントに対する処理を簡単に記述するための仕組み ASP.NET 2.0 以降はデフォルトで true • Page ディレクティブに記述されている 下記のメソッド呼び出しがハードコーディングされており、 該当するメソッドを作成しておけば自動的に呼び出される 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 これ以外のイベント発生時のメソッド呼び出しは 初期化時に登録を行う必要がある
  44. 44. ページイベントによる処理(初期表示) Get メソッドによるアクセス 初期化 内部のコントロールを含む コントロールツリーの作成 レンダリング • 各コントロールがプロパティの状態を元に 自分自身を HTML 化し、レスポンスに追加 ( HttpContext のレスポンスに書き込み)
  45. 45. コントロールのツリー _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 終了タグ ソースコードで対応を確認
  46. 46. コントロールツリー aspx 内のすべての要素がコントロール 化 され Page クラスを根とするツリー構造 内で管理される • 文字列 →  LiteralControl • ツリーの階層構造 = タグの階層構造
  47. 47. ページイベントによる処理(ポストバック) Post メソッドによるアクセス 初期化 内部のコントロールを含むコントロールツリーの作成 リクエスト読み込み • ビューステート、ポストデータを各コントロールに割り当て コントロールイベント • ビューステートとポストデータの違いからコントロールイベン トが発生 ポストバックイベント • ポストバックの原因となったイベント(ボタンクリック等)が 発生 レンダリング • 各コントロールがプロパティの状態を元に自分自身を HTML 化し、レスポンスに追加
  48. 48. リクエストが処理される仕組み-まとめ• 一連の流れ(どのタイミングで何が起きているか )が理解できれば、フレームワーク自体を新たに 作ることも可能( ASP.NET MVC はその実例)
  49. 49. ページ遷移
  50. 50. ページ遷移の位置づけ ASP.NET の基本は PostBack である • 一連の処理は 1 ページ内で完結させるほうが 実装が楽 • 入力 → 入力確認表示 → 登録/登録確認表示 • ページの遷移は別の処理への移動ととらえる 利用できるページ遷移の種類 • リンク • リダイレクト • トランスファー • 別ページポストバック
  51. 51. リンク ユーザのクリックにより指定先の URL を表示 • リンク先が異なる Web アプリケーションでも 遷移が可能 • ASP.NET のサイトに限らない • GET メソッドを利用した遷移 • クエリ文字列を利用したデータの引渡しは可能 • URL の長さに制限あり
  52. 52. リダイレクト サーバの処理中にリダイレクトを記述する • Response.Redirect(“ 遷移先 URL ") • 実際にはブラウザに対して指定した URLに GET メソッドを発行するよう指示するレスポン スが送られる • ブラウザとのやりとりが発生する • リンク先が異なる Web アプリケーションでも 遷移が可能 • ASP.NET のサイトに限らない • GET メソッドを利用した遷移 • クエリ文字列を利用したデータの引渡しは可能 • URL の長さに制限あり
  53. 53. トランスファー サーバの処理中にトランスファーを記述する • Server.Transfer(“ 遷移先 URL ") • 実際には指定したページのインスタンスが生成され、そのページの 処理が開始される • トランスファーの遷移先は同一の Web アプリケーション内に限定 される • 1 つのリクエストの処理の中で実行されるページのインスタンス が 置き換わるため、ブラウザの URL は遷移前のまま変わらない • 1 つのリクエストの処理の中で実行されるページが置き換わるため 、 ページの認証、承認といったアプリケーションイベントは、遷移前
  54. 54. トランスファーのイメージ
  55. 55. 別ページポストバック ボタン、リンクボタン、イメージボタンの PostBackUrl オプションに遷移先を設定す る ボタンクリックにより指定した遷移先が 呼び出される • POST メソッドを利用した呼び出しが行われる • JavaScript を利用して form のポスト先を 書き換えている • 遷移した先が同一 Web アプリケーションであれ ば PreviousPageType ディレクティブを設定して 遷移元で公開しているプロパティの値を取得可能
  56. 56. ステート保持
  57. 57. ステート保持 Web アプリケーションの基本はステート レス • ページの遷移時だけでなく、ポストバック時 も 以前の状態を保持できない アプリケーションとして一連の処理を 実行するためには、様々な長さでステー トを 保持できる必要がある • ポストバック間 • ページ遷移間 • ユーザが処理を行っている間
  58. 58. ポストバック間でのステート保持 ViewState • Webコントロールはデフォルトで ViewState を 利用する • ページ単位、コントロール単位で制御可能 • プログラムから独自に利用することも可能 • 格納できるのはシリアライズ可能なオブジェクト • 取得時に型を設定する必要がある • データ量に注意する必要がある • DataGrid 等と SqlDataSource を組み合わせて ページング/ソーティングを行っている場合、 表示されるデータは該当するページ内のものだが、 ViewState には抽出されたすべてのデータが含まれる • 通信量の増大が体感実行速度に影響
  59. 59. ページ遷移間でのステート保持 ページ遷移の方法によって利用できるものが異な る • リンク:クエリ文字列 • リダイレクト:クエリ文字列 • トランスファー:クエリ文字 列、 HttpContext.Items • ページ間ポストバック: POST デー タ、 ViewState HttpContext.Items • Idictionary 型- key を設定して object を格納で きる • HttpContext はリクエストの処理の間を通じて 存在しており、トランスファー実行時のページ間 での データの受け渡しが可能
  60. 60. ユーザが処理を行っている間でのステート保持 クッキー • ブラウザ側で値を保持 • リクエスト時に毎回ブラウザからサーバに送られる • 有効期間を設定可能 • ブラウザを閉じても存続させることが可能 • 格納できる長さに制限あり • ブラウザの設定によっては利用不可 セッションオブジェクト • デフォルトではセッションの判定(セッションキーを保持している)にクッ キーを利用 • デフォルトではサーバ上のメモリにデータを格納する • 格納できるデータはシリアライズ可能なもの • セッションキーを保持しているブラウザから一定期間アクセスがない場合に データは破棄される • http はブラウザからのリクエストではじめて処理が開始されるので、サーバ側で は リクエストを待っているしかない • Web.config で一定期間の設定を変更可能
  61. 61. セッション利用の設定変更 クッキーレス <system.web> <sessionState cookieless="UseUri"/> </system.web> • 携帯等クッキーを利用できないブラウザを想定する場合に設定 • セッションキーが URL に埋め込まれる データの保存場所 <system.web> <sessionState mode=“InProc"/> </system.web> • InProc • サーバ上のメモリ内に格納される • Session_OnEnd が発生するのはこの状態のみ • StateServer • 複数台のサーバがある場合、その中の一台のメモリ上に格納される • セッションを格納するサーバで StateServer のサービスを起動する必要がある • SQLServer • データベース上に格納される • aspnet_regsql.exe ツールを利用してセッション状態を保持するデータベースをインストールす る • セッションデータはアクセスがない状態で一定時間が経過したタイミングで削除される
  62. 62. アプリケーションが起動している間でのステート保持 アプリケーションオブジェクト • 格納できるデータはシリアライズ可能なもの • 書き込み時には競合に注意 • Application.Lock ()、 Application.UnLock() を利用する • Lock 、 UnLock はファイル書き込み等の排他制御に 利用することも可能 • 処理速度を低下させる場合もあるので利用には注意 • Web アプリケーションは一定時間リクエストをま ったく受け取らなかった場合に終了することに注 意 • http はブラウザからのリクエストではじめて処理が開始 されるので、サーバ側ではリクエストを待っているしか ない • Web.config で一定期間の設定を変更可能 • 次にリクエストを受け取ったときに起動が行われる
  63. 63. キャッシュ
  64. 64. キャッシュの種類 データキャッシュ • Cache オブジェクトにオブジェクトを追加する • Cache オブジェクトはアプリケーション全体で利 用可能 ページの部分キャッシュ • ユーザコントロールを作成し、 outputcache ディレクティブを設定する ページキャッシュの部分更新 • Substitution コントロールを利用する ページキャッシュ • ページに outputcache ディレクティブを設定する • クエリ文字列毎にキャッシュを持つことが可能
  65. 65. キャッシュの生存期間 キャッシュの設定時に期間を指定 • データキャッシュ • 時間指定 • 依存関係指定 • ファイル、ディレクトリ、他のデータキャッシュ等 • キャッシュの項目削除時に通知を受けることも可能 • この機能を利用して、定期的な処理を組み込むこともで きる • ページキャッシュ • 時間指定 • SQL Server の特定テーブルの変更に依存させることも 可能 • aspnet_regsql.exe で設定 • キャッシュの配置位置をクライアント/サーバ/両方に 指定することも可能
  66. 66. キャッシュの利用にあたって どこの負荷を下げたいのかを考慮する • データベース/ Web サーバ/ネットワーク 表示の変更タイミングを考慮する • データの変更頻度 • ユーザ毎に異なる表示が必要か? 調整は必要
  67. 67. コントロールの基礎
  68. 68. コントロールの種類 HTML コントロール • HTML ツールボックスからドラッグ アンド ドロップ • コントロールツリーでは LiteralControl となり、サーバ上のプログラムで制御できな い • 記述した内容そのままが HTML となる HTML サーバコントロール • HTML コントロールに runat=“server” を追加 • サーバ上のプログラムで制御可能 • 記述した内容がほぼそのまま HTML となる • デザイナー主導で HTML が先に定義されている場合等に利用できる Web コントロール • 標準ツールボックスからドラッグ アンド ドロップ • サーバ上のプログラムで制御可能 • プロパティの状態によって生成される HTML が変わる • TextBox の TextMode ( SingleLine 、 Password 、 MultiLine ) • ViewState を利用し、ポストバック前後の自分の状態を保持する • カレンダー、データグリッドのように内部的にコントロールを持つ複合コントロール も存在する
  69. 69. Web コントロールの動作を確認する 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"); }
  70. 70. いくつかの状態を確認 下記の状態でトレースを確認 • 初期表示 • テキストボックスに「 Hello 」と入力し、ボタンをクリック • テキストボックスを変更せず、ボタンをクリック • テキストボックスを「 Hello World 」に変更し、 Enter キーを入力 • テキストボックスを「 Hello 」に変更し、 Enter キーを入力 確認内容 • Page_Load は常に実行される • テキストボックスにはポストバック前のデータが表示される • ビューステートに含まれている • TextChanged はポストバック時に実行される • ビューステートの内容とフォームコレクションの値が異なることを判別して イベントが発生している • ボタンをクリックしないと Button1_Click イベントは発生しない • フォームコレクションに Button1 が表示されていない
  71. 71. AutoPostBack で何が起きるのか Default.aspx <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True" ontextchanged="TextBox1_TextChanged"> </asp:TextBox> 確認内容 • 生成される HTML ソースに JavaScript の記述と その呼び出し部分が追加されている • テキストボックスの内容を変更し、 カーソルを移動するとポストバックが発生する • ポストバック時、 TextChanged が実行される
  72. 72. プロパティの変更と HTML 生成 プログラムによるプロパティ変更 protected void Button1_Click(object sender, EventArgs e) { Label1.Text = TextBox1.Text; TextBox1.TextMode = TextBoxMode.MultiLine; } 確認内容 • コントロールは自身のプロパティの値によって 生成する HTML を変更する • プロパティの変更はデザイン時だけでなく、 プログラムによる変更も有効
  73. 73. ASP.NET でのプログラミング作業とは Web アプリでのサーバの作業は HTML (文字列)を 組み立てること ASP.NET では各種コントロールを導入することで 直接文字列を組み立てることはなくなっている • どのような HTML を生成するかは 個々のコントロールの責任 • コントロールはプロパティの値を元にそれに合わせた HTML を生成する • Render のタイミングまでにコントロールのプロパティを 適切に操作する作業が ASP.NET でのプログラミング作業 • ページイベント、コントロールイベントを理解し、 プロパティの操作に適切なタイミングを選択する必要がある
  74. 74. 検証コントロール
  75. 75. 検証コントロールの種類 RequiredFieldValidator • 必須入力チェック RangeValidator • 範囲チェック ReqularExpressionValidator • 正規表現によるチェック CompareValidator • 比較チェック CustomValidator • 独自チェック ValidationSummary • 複数の Validator の ErrorMessage をまとめて表示
  76. 76. 検証コントロールの使い方 1 つのコントロールに必要なチェック項目 毎に検証コントロールを追加する • 必須入力チェックと正規表現チェックなど • 例:メールアドレス必須入力 ValidationSummary を利用する場 合、 ErrorMessage プロパティに詳細メッ セージ、 Text プロパティにエラー表示を設 定する ValidationGroup プロパティを設定すること で 1 ページ内でチェックを行う範囲を分割す ることができる
  77. 77. データアクセスの基礎
  78. 78. データベースの準備 項目の追加からデータベースを追加 • テーブル、各項目の追加/編集も VS 上から可能 開発にのみ利用し、運用環境は別に用意する • 追加されるデータベースは Express Edition 特有の機能 (ユーザインスタンス)により実行されている • データベースの管理、設定がしにくい 運用環境では別途データベースを用意し、 セキュリティやバックアップ等の管理をきちんと行う • データベース管理の知識は必須事項 • Express Edition を利用してもよいが、ユーザインスタンスを 使わない • 接続文字列を正しく変更すれば、プログラムの修正は必要な い
  79. 79. データ操作用のコントロール GirdView • Grid 形式でのデータの表示/編集/削除が可能 • データの追加はサポートしていない DetailsView • 単票形式でのデータの表示/編集/削除/追加が可能 • テーブルタグを利用 FormView • 単票形式でのデータの表示/編集/削除/追加が可能 • 自由配置 DataList • レイアウトは自由に設定可能 • 横にデータを5つ並べるといった配置が可能 • データの追加はサポートしていない Repeater • データの繰り返し表示のみをサポート ListView • もっとも柔軟性の高い、その分複雑なコントロール • データの表示/編集/削除/追加が可能
  80. 80. データの接続を管理するDataSource SqlDataSource • SQL Server に接続する AccessDataSource • Access に接続する ObjectDataSoure • DataSet を含むオブジェクトの集合に接続する • データの取得/更新等はオブジェクト側で実装されている必要があ る XmlDataSource • XML データに接続する SiteMapDataSource • SiteMap データに接続する LinqDataSource • LINQ to SQL クラスに接続する EntityDataSource • Entity Data Model に接続する
  81. 81. データ操作の基本 データ操作用コントロールと DataSource を関連づ ける • ウィザードからの設定で簡単なデータ操作はプログラム完了 • 応用できるようにするためには、生成されるタグの意味を きちんと理解する 表示のみであれば、 DataSource を使わなくてもよ い • データをなんらかの方法で取得し、データ操作用コントロー ルにバインドすることで表示は可能 • DataBind メソッドの呼び出しが必要 • DataSource を関連付けている場合は DataBind メソッドは 自動的に呼び出される データ操作用コントロールに渡すデータを うまく生成することをまず考える
  82. 82. データ操作をカスタマイズするには コントロールツリーを確認する コントロールイベントの発生タイミングを確認す る • DataBinding 、 RowCreated など TemplateField に変換することでより細かい動作 状況を確認できる場合もある • TemplateField への変換は、ある意味複合化された コントロールを分解する処理である
  83. 83. データ操作コントロール利用時の注意点 ViewState の肥大化 • SqlDataSource のページング/ソーティングは すべてのデータを ViewState に保持することで実現されて いる 編集実装時の注意 • 検証コントロールを個々の入力領域に対して設定する • TemplateField 化が必須 • 同時実行制御で利用される SQL 文に注意する • 標準ではすべてのデータの比較 削除実装時の注意 • 標準では削除リンクをクリックしたタイミングでデータ自体 を削除 • 確認の表示を行う等の対処は考慮すべき
  84. 84. データ操作参考情報 GridView と DetailsView でデータ管理ページを作成 する • http://codezine.jp/article/detail/379/ ASP.NET 備忘録(どっとねっとふぁん Blog 内) • http://dotnetfan.org/blogs/dotnetfanblog/archive/category/1003.aspx • GridView からデータを追加する • 複数行のデータを表示/編集できる GridView • GridView の 1 行に複数のデータを折り返して表示する • データの値によって GridView に表示されるコントロールを変更 する • DetailsView の内部で DropDownList を使う • DetailsView の内部で階層的に DropDownList を使う • GridView のページコントロールをカスタマイズする • GirdView で削除フラグを持つテーブルを DataSource から利用す る
  85. 85. メンバーシップ
  86. 86. コーディングレスでページ認証 Default.aspx • LoginStatus • LoginName • ChangePassword Login.aspx • Login • CreateUserWizard Web サイト管理ツール • 認証の種類 - インターネットから • アクセス規則の作成 -トップディレクトリで 匿名ユーザを拒否
  87. 87. 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 )は自動的に生成 される VisualStudio に含まれる機能であり、別のマシンか らは利用できない
  88. 88. メンバーシップの基礎 認証と承認 • アプリケーションイベントとして リクエストの処理の初期に実行される 認証 • ユーザが誰かを確認する • ログイン後はログインチケットを元にユーザが確定され る • メンバーシップが有効になるのは Form 認証の設定が行われている場合 承認 • ページへのアクセス権を確認する • ユーザ/ロールに対して許可/拒否を設定
  89. 89. 認証の設定 デフォルト値( 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">
  90. 90. 承認の設定 設定例(未認証ユーザを拒否) <authorization> <deny users=“?” /> </authorization> 許可( allow )/拒否( deny ) すべてのユーザ(” *” ) / 未認証ユーザ(” ?” ) ロール名 / ユーザ名で個別に指定 適用順序が記述順であることに注意 • allow と deny の組み合わせがある場合に注意 <deny roles=“manager” /> <allow roles=“Admins” />   この設定を行った場合、 Admins と manager の双方に含まれるユーザは 拒否されてしまう フォルダ/ファイル単位で設定可能 • フォルダ毎に web.config を置いて設定できる • トップフォルダの web.config のみで設定を管理したい場合は Location 要素を利用する
  91. 91. メンバーシップの設定 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 のプロパティに対応
  92. 92. メンバーシッププロバイダ ユーザの認証情報を保存/取得する プロバイダを置き換えることで様々なデータストアに対応 • 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 もメンバーシッププロバイダを提供して いる
  93. 93. メンバーシップ用 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>
  94. 94. メンバーシップ DB の構築 運用時には SQL Server 上に ASPNETDB を構築する 既存のデータベース上に必要なテーブル、 ストアドプロシージャを構築してもよい • DB サーバに .NET Framework がインストール されていれば aspnet_regsql.exe を実行して ウィザードで構築が可能 • テーブル等を生成する SQL スクリプトを 作成してもよい • aspnet_regsql.exe –sqlexportonly ファイル名 – A all –d データベース名
  95. 95. メンバーシップコントロール 組み合わせて利用する • Login - アカウントとパスワードによる認 証 • CreateUserWizard - ユーザの登録 • ChangePassword - パスワード変更 • PasswordRecovery - パスワードの再送 • LoginStatus - ログイン状態表示 • LoginName - ログイン名表示 • LoginView - ログイン状態に応じ表示内容を変 更 デザインのカスタマイズ • オートフォーマットの適用 • 各種プロパティによる変更 • テンプレートに変換すると細かい調整が可能
  96. 96. メンバーシップコントロールの表示項目 コントロールのプロパティと web.config の 双方の調整が必要 例: CreateUserWizard コントロールか ら メールと質問項目を削除 • コントロールの RequireEmail プロパティを False に • SqlMembershipProvider の以下の設定を確認 • requiresUniqueEmail - False • requiresQuestionAndAnswer - False
  97. 97. メンバーシップ利用時の注意点 applicationName 要素の指定 • デフォルト -  applicationName = “/” • Web アプリケーション毎に異なる値を指定するこ とで 1 つの DB で複数の Web アプリケーショ ンのユーザを管理することが可能 • 逆に同じ設定をすることで、複数の Web アプリ ケーションで同一のユーザ情報を管理することが 可能 サーバ上でユーザを管理する仕組みがない • Web サイト管理ツールと同等の仕組みを実装する • メンバーシップ API は用意されている • IIS7では IIS の管理ツールに ASP.NET の ユーザ管理が組み込まれている
  98. 98. ロール
  99. 99. ロールの基礎 ロールとは • ユーザをグループ単位で認証/承認する仕組 み 認証 • ユーザをロールと関連付ける • ASP.NET による Windows 認証時、および Form 認証時にロールを有効にできる 承認 • ページへのアクセス権を確認する
  100. 100. ロールの設定 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 からロールを取得
  101. 101. ロールの有効化 利用するための設定 • 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”);
  102. 102. ロールの利用 フォルダ単位で 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 が設定されている必要がある
  103. 103. ユーザコントロール
  104. 104. ユーザコントロールとは いくつかのコントロールをまとめて 1 つのコントロ ールのように扱うための仕組み • ascx ファイル上にコントロールを配置し、処理を記述 • ascx ファイルのドラッグ アンド ドロップで aspx ページ内にユーザコントロールを追加 • ascx ファイルにパブリックなプロパティを記述することで 、 aspx ページとのデータのやりとりが可能に 貼り付けたコントロールは、 aspx ページの一部とし て 動作する • aspx ページのページイベントの中でユーザコントロールの 各イベントが呼ばれる • aspx ページに貼り付けられたユーザコントロールは ページ毎に別のコントロールとして動作する
  105. 105. マスターページ
  106. 106. マスターページとは 主にサイトの外観を統一するために利用される仕 組み • フレームとは異なる • 仕組みとしては特殊なユーザコントロールと考えたほう がよい • 読み込まれる各 aspx ページの一部として動作する • マスターページに相対的なリンクを記述することは避ける 階層を重ねることが可能 • ASP.NET としては以前から可能であったが、 IDE としては VS2008 からサポート コンテンツ領域( ContentPlaceHolder )は 複数設定することが可能
  107. 107. ASP.NET AJAX の基礎
  108. 108. UpdatePanel による簡単 AJAX Default.aspx • テキストボックス、ボタン、ラベルを追加 Default.aspx.cs   protected void Button1_Click(object sender, EventArgs e) { Label1.Text = TextBox1.Text; } 動作を確認後 Default.aspx に以下を追加 • ScriptManager • UpdatePanel • テキストボックス、ボタン、ラベルを UpdatePanel 内に移動
  109. 109. 何が起きているのか HTML ソースに WebResource.axd 、 ScriptResource.axd が追加されてい る • ダウンロードされる js ファイルを VS2008 から確認可能 • MicrosoftAjax.js • MicrosoftAjaxWebForm.js HTML の form 、 input type = “submit” 等が 変更されているわけではない • Submit は MicrosoftAjaxWebForms.js の _onFromSubmit に置き 換えられる • Sys$WebForms$PageRequestManager$_onFormSubmit Update パネル利用時は基本的に通常の Postback と同じ リクエストがあがり、書き換えが部分的に行われる • AJAX を利用することによる処理の効率化はあまりはかられない • プログラミング自体はとても簡単
  110. 110. 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 は便利だが、それに限定されるものではな い 今後、 JQuery (オープンソースのライブラリ)がサポー トされる
  111. 111. ASP.NET の最新状況
  112. 112.  Dynamic Data ( 3.5 SP1 ) • データ管理システムをコーディングレスで構築 • LINQ to SQL 、 Entity Framework に対応 ADO.NET Data Services ( 3.5 SP1 ) • REST ベースのデータの Web サービス管理をコーディングレスで構築 • Entity Framework に対応 Chart コントロール • 各種チャートの生成を行う ASP.NET MVC • Model View Controller パターンに基づいたフレームワークを ASP.NET 上 に実装したもの • テスト駆動開発が可能 • Web フォームコントロールを使わずに Web アプリを構築する • より細かい制御が可能であるが、その分細かい作業が必要となる

×