SlideShare ist ein Scribd-Unternehmen logo
1 von 112
ASP.NET に入門する 2 日間

  Visual Studio User Group
  Web アプリケーションフォーラムリーダー
          小野 修司 (どっとねっと
  ふぁん)
                     
     2009/3/28 - 29
Agenda
Web アプリケーションの
特徴
Web アプリケーションの特徴
 「ブラウザ」と「サーバ」間のやりとり
を
繰り返して一連の処理を行う
 • ブラウザ
  • サーバにリクエストをあげる
  • サーバから受け取った HTML ( JavaScript   を含む
   )を
   解釈してユーザインタフェースを表示する
 • サーバ
  • ブラウザから受け取ったリクエストに応じた処理を
   行い、 HTML を組み立ててブラウザに返す
    •   HTML というソースコードを生成している、と考え
        られる
Web アプリケーションの構築/デバッグに必要な
知識

 サーバ

 • Web   サーバ、データベースサーバの設定/管
  理
 クライアント
                      
 • ブラウザによる実装の違い
   • HTML 、 CSS 、スクリプト
 ネットワーク

 • TCP / IP 、 http
 セキュリティ
http 基礎
http 基礎
   サーバへのリクエストがあって、はじめてレスポン
    スが返る
    •   サーバから一方的にデータを送りつけることはできない
   サーバはステート(前回のリクエスト状態等)を持
    たない
    •   ブラウザから次のリクエストが送られることを予期しない
   利用されるメソッド
    •   GET
        •   ブラウザに URL を入力し、リターンキーを押したとき
        •   指定した URL に相当するページを返すようサーバに指示
        •   クエリ文字列を利用することで引数的にデータを渡せる
        •   文字数制限あり( IE 2,083 文字)
    •   POST
        •   入力欄にデータを入力し、ボタン等を押したとき
        •   入力されたデータ等をサーバに渡す
        •   送信先ページは action で指定
        •   文字数制限なし
http の動作を確認する
   telnet による動作確認
        telnet > open   localhost ポート番号
        GET / プロジェクト名 / Index.htm HTTP / 1.1
        Host: localhost
    •   HTML が返される

   http による通信は文字列のやりとりである
    •   ブラウザとサーバで共通のデータを扱うためにはデータを文字列化して
        リクエスト/レスポンスに含める必要がある

   http による通信は必ずリクエストからはじまる

   ブラウザは HTML を解釈して画面表示を行う
    •   サーバは HTML というソースコードを生成する
    •   サーバ上でできる処理(ソースコード生成-文字列組み立て)とブラウザで
        できる処理(画面表示変更)を区別した設計が必要

   ASP.NET も http の上になりたっている
ASP.NET の特徴
ASP.NET の特徴
 PostBack   が動作の基本
  • form   タグの action 先が自分自身
    •   ASP 等では action 先を別のページにし、データ入力ペ
        ージとデータ処理ページを分けるのが一般的だった
  • イベントドリブン型の開発のための仕掛け
 コンパイルによる処理速度向上
  • aspx ファイルはソースコード化されコンパイル
  • 最初の実行開始時に dll が作成される
    •   ソースの修正等をしなければ dll はそのまま利用される
  • 実行時にメソッド単位で    JIT コンパイルされるの
   は Windows アプリ等と同じ
ASP.NET の動作を確認する
 サンプルプログラム

 • Default.aspx
   • Page ディレクティブに Trace = “true” を追加
   • テキストボックス、ボタン、ラベルを追加

 • Default.aspx.cs
     protected void Button1_Click(object sender,
     EventArgs e)
     {
        Label1.Text = TextBox1.Text;
     }
確認してみる内容
   初期表示時の要求の種類の確認
    •   トレースで表示される

   ソース/ HTML の確認
    •   プラウザからソースを表示
    •   form タグに注目

   ボタンクリック後の要求の種類の確認
    •   トレースで表示される

   テンポラリーファイルの内容を確認
    • VISTA VS2008
       • C:UsersUserNameAppDataLocalTempTemporary ASP.NET Files
    • VS2005 まで
        •   C:WindowsMicrosoft.NETFrameworkv2.0.50727Temporary ASP.NET
            Files
    •   d ll、ソースコード( debug 時)、その他
ASP.NET の実行環境
( IIS )
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   ベース
    •   Windows 認証

   ASP.NET の認証機能を利用するほうが
    細かい設定が容易
    •   IIS 側は匿名を許可しておく
開発サーバと IIS の違い
   VS2005 以降には開発サーバが含まれており、
    その上で動作検証が可能
   開発サーバと IIS では動作が異なる
    •   ファイルマッピング
        • 開発サーバ - すべてのファイルが ASP.NET によって処理さ
          れる
        • IIS - アプリケーションの構成で ASP.NET に関連づけられ
            た
            拡張子のファイルのみ ASP.NET によって処理される
        •   開発サーバでは web.config によるアクセス制御が
            画像ファイル等にも影響する
    •   実行ユーザ
        • 開発サーバ - ログイン中のユーザの権限で実行される
        • IIS - ASPNET ユーザまたは Network Service ユーザの
          権限で実行される
        • ファイルへの書き込み等を行っている場合に注意
IIS7 と ASP.NET
   ASP.NET を有効にすることで実行可能

   IIS7 は ASP.NET をベースに進化したものと
    考えてよい(統合モード)
    •   ファイルはすべて ASP.NET によって処理される
    •   実行ユーザは NT AUTHORITYNETWORK SERVICE
    •   ASP.NET の設定と IIS7 の設定ツールが一体化してい
        る
        • 一部   web.config の書き方が異なるので注意

   IIS6 と同様の動作をさせるためには
    クラッシックモードを選択

   アプリケーションの設定は IIS7 でも必要
ASP.NET の開発環境
Visual Studio と .NET
Framework
   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 アプリケーションプロジェクト
無料で利用できる開発環境
   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 への連携なし
Web アプリケーションプロジェ
        クト
         と
  Web サイトプロジェクト
何が違うのか?
   コンパイルのタイミング
    •   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 の設定
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 の参照と利用するコンパイ
         ラの設定が追加される
       • 3.5 SP1 は 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                  リクエストの処理終了時に発生
アプリケーションイベント
   イベントの発生順序は固定
    •   必ず同じ順序で発生する

   すべてのリクエストに対してイベントが発生
    •   認証/承認等の処理はすべてのリクエストに対して
        行われる

   Global.asax に記述することでイベント発生時に
    独自の処理を組み込める
    •   いくつかの処理を組み合わせて登録する HttpModule
        という仕組みも存在する
    •   認証/承認等の処理はデフォルトで組み込まれている
        HttpModule により行われている
重要なアプリケーションイベン
ト
   認証
    • 接続しているユーザがだれかを設定する
   承認
    • 接続しているユーザにページへのアクセス権が
     あるかを確認する

   ハンドラの実行
    • aspx ページの実行
    • ashx 、 asmx 、 svc   等もこの仕組みにより実行
アプリケーションイベントと
HttpContext
   イベントにブレークポイントを設定
    •   BeginRequest
    •   AuthenticateRequest
    •   PostMapRequestHandler

   ウォッチウィンドウで HttpContext.Current
    の
    以下のプロパティの状態を確認
    • User
    • Handler
   アプリケーションイベントを通り抜けてい
    くことで HttpContext が変化する
ページ毎の処理
ページ毎の処理
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 )
ashx ファイル
   もっともシンプルな IHttpHandler 実装
    •   IsReusable メソッド
         •   false を返す

    •   ProcessRequest
         •   処理を記述
         •   Context.Response にブラウザに返したいデータを書き込む

   画像ファイルや文書ファイルのダウンロード時に
    ASP.NET の処理を追加したい場合等に利用できる
    •   ダウンロード回数のカウント
    •   認証済みユーザにのみダウンロードを許可

   出力する内容を完全にコントロールできる
    •   aspx ファイルを利用すると、意図しない出力が追加される場合も
aspx ファイル
   System.Web.UI.Page クラスを継承
    •   IHttpHandler インターフェイスを継承している

   内部に多くのコントロールを持つ
    •   通常ツールボックスからのドラッグ アンド ドロップで
        追加

   ページライフサイクル
    •   ページのインスタンスはリクエスト毎に生成され消滅
        する
        • 初期表示時のインスタンスとポストバック時のインスタンス
         に
         関連は存在しない(ステートレス)
    •   ページが生成して消滅するまでにページイベントが
        決まった順番で発生する
ページイベント
     初期表示時                        ポストバック時
      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
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

   これ以外のイベント発生時のメソッド呼び出しは
    初期化時に登録を行う必要がある
ページイベントによる処理(初期表示
)
   Get メソッドによるアクセス

   初期化
   内部のコントロールを含む
    コントロールツリーの作成
   レンダリング
    • 各コントロールがプロパティの状態を元に
     自分自身を HTML 化し、レスポンスに追加
     ( HttpContext のレスポンスに書き込み)
コントロールのツリー
   _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
    • ツリーの階層構造 = タグの階層構造
ページイベントによる処理(ポストバ
ック)
   Post メソッドによるアクセス

   初期化
   内部のコントロールを含むコントロールツリーの作成
   リクエスト読み込み
    •   ビューステート、ポストデータを各コントロールに割り当て
   コントロールイベント
    •   ビューステートとポストデータの違いからコントロールイベン
        トが発生
   ポストバックイベント
    •   ポストバックの原因となったイベント(ボタンクリック等)が
        発生
   レンダリング
    •   各コントロールがプロパティの状態を元に自分自身を HTML
        化し、レスポンスに追加
リクエストが処理される仕組み-ま
とめ

• 一連の流れ(どのタイミングで何が起きているか
 )が理解できれば、フレームワーク自体を新たに
 作ることも可能( ASP.NET MVC はその実例)
ページ遷移
ページ遷移の位置づけ
   ASP.NET の基本は PostBack である
    • 一連の処理は   1 ページ内で完結させるほうが
     実装が楽
      • 入力 → 入力確認表示 → 登録/登録確認表示
    • ページの遷移は別の処理への移動ととらえる
   利用できるページ遷移の種類
    • リンク
    • リダイレクト
    • トランスファー
    • 別ページポストバック
リンク
   ユーザのクリックにより指定先の URL
    を表示
    • リンク先が異なる       Web アプリケーションでも
     遷移が可能
      • ASP.NET   のサイトに限らない
    • GET   メソッドを利用した遷移
      • クエリ文字列を利用したデータの引渡しは可能
      • URL の長さに制限あり
リダイレクト
   サーバの処理中にリダイレクトを記述する
    • Response.Redirect(“ 遷移先 URL ")
    • 実際にはブラウザに対して指定した URLに
     GET メソッドを発行するよう指示するレスポン
     スが送られる
      • ブラウザとのやりとりが発生する
    • リンク先が異なる       Web アプリケーションでも
     遷移が可能
      • ASP.NET   のサイトに限らない
    • GET   メソッドを利用した遷移
      • クエリ文字列を利用したデータの引渡しは可能
      • URL の長さに制限あり
トランスファー
   サーバの処理中にトランスファーを記述する
    •   Server.Transfer(“ 遷移先 URL ")

    •   実際には指定したページのインスタンスが生成され、そのページの
        処理が開始される

    •   トランスファーの遷移先は同一の Web アプリケーション内に限定
        される

    •   1 つのリクエストの処理の中で実行されるページのインスタンス
        が
        置き換わるため、ブラウザの URL は遷移前のまま変わらない

    •   1 つのリクエストの処理の中で実行されるページが置き換わるため
        、
        ページの認証、承認といったアプリケーションイベントは、遷移前
トランスファーのイメージ
別ページポストバック
   ボタン、リンクボタン、イメージボタンの
    PostBackUrl オプションに遷移先を設定す
    る
   ボタンクリックにより指定した遷移先が
    呼び出される
    • POST メソッドを利用した呼び出しが行われる
    • JavaScript を利用して form のポスト先を
        書き換えている
    •   遷移した先が同一 Web アプリケーションであれ
        ば PreviousPageType ディレクティブを設定して
        遷移元で公開しているプロパティの値を取得可能
ステート保持
ステート保持
   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   サーバ/ネットワーク


   表示の変更タイミングを考慮する
    • データの変更頻度
    • ユーザ毎に異なる表示が必要か?
   調整は必要
コントロールの基礎
コントロールの種類
   HTML コントロール
    •   HTML ツールボックスからドラッグ アンド ドロップ
    •   コントロールツリーでは LiteralControl となり、サーバ上のプログラムで制御できな
        い
    •   記述した内容そのままが HTML となる

   HTML サーバコントロール
    •   HTML コントロールに runat=“server” を追加
    •   サーバ上のプログラムで制御可能
    •   記述した内容がほぼそのまま HTML となる
    •   デザイナー主導で HTML が先に定義されている場合等に利用できる

   Web コントロール
    •   標準ツールボックスからドラッグ アンド ドロップ
    •   サーバ上のプログラムで制御可能
    •   プロパティの状態によって生成される HTML が変わる
         •   TextBox の TextMode ( SingleLine 、 Password 、 MultiLine )
    •   ViewState を利用し、ポストバック前後の自分の状態を保持する
    •   カレンダー、データグリッドのように内部的にコントロールを持つ複合コントロール
        も存在する
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");
       }
いくつかの状態を確認
   下記の状態でトレースを確認
    •   初期表示
    •   テキストボックスに「 Hello 」と入力し、ボタンをクリック
    •   テキストボックスを変更せず、ボタンをクリック
    •   テキストボックスを「 Hello World 」に変更し、 Enter キーを入力
    •   テキストボックスを「 Hello 」に変更し、 Enter キーを入力

   確認内容
    • Page_Load は常に実行される
    • テキストボックスにはポストバック前のデータが表示される
       • ビューステートに含まれている
    • TextChanged はポストバック時に実行される
         •   ビューステートの内容とフォームコレクションの値が異なることを判別して
             イベントが発生している
    •   ボタンをクリックしないと Button1_Click イベントは発生しない
         •   フォームコレクションに Button1 が表示されていない
AutoPostBack で何が起きるのか
   Default.aspx
    <asp:TextBox ID="TextBox1" runat="server"
      AutoPostBack="True"
    ontextchanged="TextBox1_TextChanged">
      </asp:TextBox>

   確認内容
    • 生成される HTML ソースに JavaScript の記述と
      その呼び出し部分が追加されている
    • テキストボックスの内容を変更し、
      カーソルを移動するとポストバックが発生する
    • ポストバック時、 TextChanged が実行される
プロパティの変更と HTML 生
成
   プログラムによるプロパティ変更
    protected void Button1_Click(object sender, EventArgs
     e)
      {
        Label1.Text = TextBox1.Text;
         TextBox1.TextMode = TextBoxMode.MultiLine;
      }

   確認内容
    •   コントロールは自身のプロパティの値によって
        生成する HTML を変更する
    •   プロパティの変更はデザイン時だけでなく、
        プログラムによる変更も有効
ASP.NET でのプログラミング作業
とは
   Web アプリでのサーバの作業は HTML (文字列)を
    組み立てること
   ASP.NET では各種コントロールを導入することで
    直接文字列を組み立てることはなくなっている
    •   どのような HTML を生成するかは
        個々のコントロールの責任
    •   コントロールはプロパティの値を元にそれに合わせた
        HTML を生成する
    •   Render のタイミングまでにコントロールのプロパティを
        適切に操作する作業が ASP.NET でのプログラミング作業
    •   ページイベント、コントロールイベントを理解し、
        プロパティの操作に適切なタイミングを選択する必要がある
検証コントロール
検証コントロールの種類
   RequiredFieldValidator
    •   必須入力チェック
   RangeValidator
    •   範囲チェック
   ReqularExpressionValidator
    •   正規表現によるチェック
   CompareValidator
    •   比較チェック
   CustomValidator
    •   独自チェック
   ValidationSummary
    •   複数の Validator の ErrorMessage をまとめて表示
検証コントロールの使い方
   1 つのコントロールに必要なチェック項目
    毎に検証コントロールを追加する
    • 必須入力チェックと正規表現チェックなど
      • 例:メールアドレス必須入力
   ValidationSummary を利用する場
    合、 ErrorMessage プロパティに詳細メッ
    セージ、 Text プロパティにエラー表示を設
    定する

   ValidationGroup プロパティを設定すること
    で
    1 ページ内でチェックを行う範囲を分割す
    ることができる
データアクセスの基礎
データベースの準備
   項目の追加からデータベースを追加
    •   テーブル、各項目の追加/編集も VS 上から可能

   開発にのみ利用し、運用環境は別に用意する
    •   追加されるデータベースは Express Edition 特有の機能
        (ユーザインスタンス)により実行されている
    •   データベースの管理、設定がしにくい

   運用環境では別途データベースを用意し、
    セキュリティやバックアップ等の管理をきちんと行う
    •   データベース管理の知識は必須事項
    •   Express Edition を利用してもよいが、ユーザインスタンスを
        使わない
    •   接続文字列を正しく変更すれば、プログラムの修正は必要な
        い
データ操作用のコントロール
   GirdView
     •   Grid 形式でのデータの表示/編集/削除が可能
     •   データの追加はサポートしていない
   DetailsView
     •   単票形式でのデータの表示/編集/削除/追加が可能
     •   テーブルタグを利用
   FormView
     •   単票形式でのデータの表示/編集/削除/追加が可能
     •   自由配置
   DataList
     •   レイアウトは自由に設定可能
     •   横にデータを5つ並べるといった配置が可能
     •   データの追加はサポートしていない
   Repeater
     •   データの繰り返し表示のみをサポート
   ListView
     •   もっとも柔軟性の高い、その分複雑なコントロール
     •   データの表示/編集/削除/追加が可能
データの接続を管理する
DataSource
   SqlDataSource
    •   SQL Server に接続する
   AccessDataSource
    •   Access に接続する
   ObjectDataSoure
    •   DataSet を含むオブジェクトの集合に接続する
    •   データの取得/更新等はオブジェクト側で実装されている必要があ
        る
   XmlDataSource
    •   XML データに接続する
   SiteMapDataSource
    •   SiteMap データに接続する
   LinqDataSource
    •   LINQ to SQL クラスに接続する
   EntityDataSource
    •   Entity Data Model に接続する
データ操作の基本
   データ操作用コントロールと DataSource を関連づ
    ける
    •   ウィザードからの設定で簡単なデータ操作はプログラム完了
        •   応用できるようにするためには、生成されるタグの意味を
            きちんと理解する

   表示のみであれば、 DataSource を使わなくてもよ
    い
    •   データをなんらかの方法で取得し、データ操作用コントロー
        ルにバインドすることで表示は可能
    •   DataBind メソッドの呼び出しが必要
        •   DataSource を関連付けている場合は DataBind メソッドは
            自動的に呼び出される

   データ操作用コントロールに渡すデータを
    うまく生成することをまず考える
データ操作をカスタマイズするに
は
   コントロールツリーを確認する

   コントロールイベントの発生タイミングを確認す
    る
    •   DataBinding 、 RowCreated など

   TemplateField に変換することでより細かい動作
    状況を確認できる場合もある
    •   TemplateField への変換は、ある意味複合化された
        コントロールを分解する処理である
データ操作コントロール利用時の注意
点
   ViewState の肥大化
    •   SqlDataSource のページング/ソーティングは
        すべてのデータを ViewState に保持することで実現されて
        いる

   編集実装時の注意
    • 検証コントロールを個々の入力領域に対して設定する
       • TemplateField 化が必須
    • 同時実行制御で利用される SQL 文に注意する
        •   標準ではすべてのデータの比較

   削除実装時の注意
    •   標準では削除リンクをクリックしたタイミングでデータ自体
        を削除
    •   確認の表示を行う等の対処は考慮すべき
データ操作参考情報
   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 から利用す
             る
メンバーシップ
コーディングレスでページ認証
   Default.aspx
    • LoginStatus
    • LoginName
    • ChangePassword
   Login.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 )は自動的に生成
    される
   VisualStudio に含まれる機能であり、別のマシンか
    らは利用できない
メンバーシップの基礎
   認証と承認
    • アプリケーションイベントとして
     リクエストの処理の初期に実行される
   認証
    • ユーザが誰かを確認する
     • ログイン後はログインチケットを元にユーザが確定され
         る
    • メンバーシップが有効になるのは
     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    サイト管理ツールと同等の仕組みを実装する
        • メンバーシップ   API は用意されている
    • 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 が設定されている必要がある
ユーザコントロール
ユーザコントロールとは
   いくつかのコントロールをまとめて 1 つのコントロ
    ールのように扱うための仕組み
    •   ascx   ファイル上にコントロールを配置し、処理を記述
    •   ascx   ファイルのドラッグ アンド ドロップで
        aspx   ページ内にユーザコントロールを追加
    •   ascx   ファイルにパブリックなプロパティを記述することで
        、
        aspx   ページとのデータのやりとりが可能に

   貼り付けたコントロールは、 aspx ページの一部とし
    て
    動作する
    •   aspx ページのページイベントの中でユーザコントロールの
        各イベントが呼ばれる
    •   aspx ページに貼り付けられたユーザコントロールは
        ページ毎に別のコントロールとして動作する
マスターページ
マスターページとは
   主にサイトの外観を統一するために利用される仕
    組み
    •   フレームとは異なる
    •   仕組みとしては特殊なユーザコントロールと考えたほう
        がよい
        • 読み込まれる各 aspx ページの一部として動作する
        • マスターページに相対的なリンクを記述することは避ける
   階層を重ねることが可能
    •   ASP.NET としては以前から可能であったが、
        IDE としては VS2008 からサポート

   コンテンツ領域( ContentPlaceHolder )は
    複数設定することが可能
ASP.NET AJAX の基礎
UpdatePanel による簡単 AJAX
   Default.aspx
    •    テキストボックス、ボタン、ラベルを追加

   Default.aspx.cs
          protected void Button1_Click(object sender, EventArgs
         e)
         {
            Label1.Text = TextBox1.Text;
         }

   動作を確認後 Default.aspx に以下を追加
    •    ScriptManager
    •    UpdatePanel
          •   テキストボックス、ボタン、ラベルを UpdatePanel 内に移動
何が起きているのか
   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 を利用することによる処理の効率化はあまりはかられない
    •   プログラミング自体はとても簡単
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 (オープンソースのライブラリ)がサポー
    トされる
ASP.NET の最新状況
   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 アプリを構築する
    •   より細かい制御が可能であるが、その分細かい作業が必要となる

Weitere ähnliche Inhalte

Was ist angesagt?

Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825 Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825 miso- soup3
 
Hokuriku.NET ASP.NET MVC 入門 2 回目 1.編集機能を実装
Hokuriku.NET ASP.NET MVC 入門 2 回目 1.編集機能を実装Hokuriku.NET ASP.NET MVC 入門 2 回目 1.編集機能を実装
Hokuriku.NET ASP.NET MVC 入門 2 回目 1.編集機能を実装miso- soup3
 
Asp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソAsp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソYoshitaka Seo
 
JavaScriptでWebDriverのテストコードを書きましょ
JavaScriptでWebDriverのテストコードを書きましょJavaScriptでWebDriverのテストコードを書きましょ
JavaScriptでWebDriverのテストコードを書きましょKohki Nakashima
 
WkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べたWkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べたfirewood
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようずSelenium webdriver使ってみようず
Selenium webdriver使ってみようずOda Shinsuke
 
ReVIEW & CI - ChefでCI環境構築
ReVIEW & CI - ChefでCI環境構築ReVIEW & CI - ChefでCI環境構築
ReVIEW & CI - ChefでCI環境構築Masahiro Wakame
 
Service workerとwebプッシュ通知
Service workerとwebプッシュ通知Service workerとwebプッシュ通知
Service workerとwebプッシュ通知zaru sakuraba
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようずSelenium webdriver使ってみようず
Selenium webdriver使ってみようずOda Shinsuke
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-靖 小田島
 
Hakodate - simple framework
Hakodate - simple frameworkHakodate - simple framework
Hakodate - simple frameworkHiroaki Murayama
 
Selenium 触ってみよう
Selenium 触ってみようSelenium 触ってみよう
Selenium 触ってみようOda Shinsuke
 
Chef windows linux環境構築
Chef windows linux環境構築Chef windows linux環境構築
Chef windows linux環境構築靖 小田島
 
Java on Microsoft Azure
Java on Microsoft AzureJava on Microsoft Azure
Java on Microsoft AzureYoshio Terada
 
Angular の紹介
Angular の紹介Angular の紹介
Angular の紹介Neo Xrea
 
let UIWebView as WKWebView
let UIWebView as WKWebViewlet UIWebView as WKWebView
let UIWebView as WKWebViewTaketo Sano
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方linzhixing
 

Was ist angesagt? (20)

Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825 Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
 
Hokuriku.NET ASP.NET MVC 入門 2 回目 1.編集機能を実装
Hokuriku.NET ASP.NET MVC 入門 2 回目 1.編集機能を実装Hokuriku.NET ASP.NET MVC 入門 2 回目 1.編集機能を実装
Hokuriku.NET ASP.NET MVC 入門 2 回目 1.編集機能を実装
 
Asp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソAsp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソ
 
JavaScriptでWebDriverのテストコードを書きましょ
JavaScriptでWebDriverのテストコードを書きましょJavaScriptでWebDriverのテストコードを書きましょ
JavaScriptでWebDriverのテストコードを書きましょ
 
HTML5&API総まくり
HTML5&API総まくりHTML5&API総まくり
HTML5&API総まくり
 
.NET Core 1.0
.NET Core 1.0.NET Core 1.0
.NET Core 1.0
 
WkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べたWkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べた
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようずSelenium webdriver使ってみようず
Selenium webdriver使ってみようず
 
ReVIEW & CI - ChefでCI環境構築
ReVIEW & CI - ChefでCI環境構築ReVIEW & CI - ChefでCI環境構築
ReVIEW & CI - ChefでCI環境構築
 
Service workerとwebプッシュ通知
Service workerとwebプッシュ通知Service workerとwebプッシュ通知
Service workerとwebプッシュ通知
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようずSelenium webdriver使ってみようず
Selenium webdriver使ってみようず
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
 
Hakodate - simple framework
Hakodate - simple frameworkHakodate - simple framework
Hakodate - simple framework
 
Selenium 触ってみよう
Selenium 触ってみようSelenium 触ってみよう
Selenium 触ってみよう
 
Chef windows linux環境構築
Chef windows linux環境構築Chef windows linux環境構築
Chef windows linux環境構築
 
Java on Microsoft Azure
Java on Microsoft AzureJava on Microsoft Azure
Java on Microsoft Azure
 
Angular の紹介
Angular の紹介Angular の紹介
Angular の紹介
 
REACT & WEB API
REACT & WEB APIREACT & WEB API
REACT & WEB API
 
let UIWebView as WKWebView
let UIWebView as WKWebViewlet UIWebView as WKWebView
let UIWebView as WKWebView
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 

Ähnlich wie 20090328

Apps for office オンプレミスとクラウド
Apps for office オンプレミスとクラウドApps for office オンプレミスとクラウド
Apps for office オンプレミスとクラウドHirotada Watanabe
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介david9142
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッションYuichi Hasegawa
 
App012 linux java_にも対応!_azure_service_fabric_を
App012 linux java_にも対応!_azure_service_fabric_をApp012 linux java_にも対応!_azure_service_fabric_を
App012 linux java_にも対応!_azure_service_fabric_をTech Summit 2016
 
App012 linux java_にも対応!_azure_service_fabric_を
App012 linux java_にも対応!_azure_service_fabric_をApp012 linux java_にも対応!_azure_service_fabric_を
App012 linux java_にも対応!_azure_service_fabric_をTech Summit 2016
 
TFセミナー マイクロソフト製品で作る Web インフラ 基本編
TFセミナー マイクロソフト製品で作る Web インフラ 基本編TFセミナー マイクロソフト製品で作る Web インフラ 基本編
TFセミナー マイクロソフト製品で作る Web インフラ 基本編hirookun
 
App Service の DevOps と Visual Studio Team Services 最新アップデート
App Service の DevOps と Visual Studio Team Services 最新アップデートApp Service の DevOps と Visual Studio Team Services 最新アップデート
App Service の DevOps と Visual Studio Team Services 最新アップデートMicrosoft Azure Japan
 
ASP. NET Core 汎用ホスト概要
ASP. NET Core 汎用ホスト概要ASP. NET Core 汎用ホスト概要
ASP. NET Core 汎用ホスト概要TomomitsuKusaba
 
AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)Akio Katayama
 
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-publicAmazon Web Services Japan
 
Development tools for WordPress
Development tools for WordPressDevelopment tools for WordPress
Development tools for WordPressBREN
 
SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理
SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理
SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理Oshitari_kochi
 
Windows 開発者のための Dev&Ops on AWS
Windows 開発者のための Dev&Ops on AWSWindows 開発者のための Dev&Ops on AWS
Windows 開発者のための Dev&Ops on AWSAmazon Web Services Japan
 
フロントエンド開発環境
フロントエンド開発環境フロントエンド開発環境
フロントエンド開発環境Masaki Kawaguchi
 
[Microsoft Tech Summit] Linux/Java にも対応! Azure Service Fabric を使ったマイクロサービス開発
[Microsoft Tech Summit] Linux/Java にも対応! Azure Service Fabric を使ったマイクロサービス開発[Microsoft Tech Summit] Linux/Java にも対応! Azure Service Fabric を使ったマイクロサービス開発
[Microsoft Tech Summit] Linux/Java にも対応! Azure Service Fabric を使ったマイクロサービス開発Naoki (Neo) SATO
 
WebSphere Application Server V8.5.5 Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51
WebSphere Application Server V8.5.5Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51WebSphere Application Server V8.5.5Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51
WebSphere Application Server V8.5.5 Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51Takakiyo Tanaka
 

Ähnlich wie 20090328 (20)

20060419
2006041920060419
20060419
 
Apps for office オンプレミスとクラウド
Apps for office オンプレミスとクラウドApps for office オンプレミスとクラウド
Apps for office オンプレミスとクラウド
 
20050903
2005090320050903
20050903
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッション
 
App012 linux java_にも対応!_azure_service_fabric_を
App012 linux java_にも対応!_azure_service_fabric_をApp012 linux java_にも対応!_azure_service_fabric_を
App012 linux java_にも対応!_azure_service_fabric_を
 
App012 linux java_にも対応!_azure_service_fabric_を
App012 linux java_にも対応!_azure_service_fabric_をApp012 linux java_にも対応!_azure_service_fabric_を
App012 linux java_にも対応!_azure_service_fabric_を
 
TFセミナー マイクロソフト製品で作る Web インフラ 基本編
TFセミナー マイクロソフト製品で作る Web インフラ 基本編TFセミナー マイクロソフト製品で作る Web インフラ 基本編
TFセミナー マイクロソフト製品で作る Web インフラ 基本編
 
App Service の DevOps と Visual Studio Team Services 最新アップデート
App Service の DevOps と Visual Studio Team Services 最新アップデートApp Service の DevOps と Visual Studio Team Services 最新アップデート
App Service の DevOps と Visual Studio Team Services 最新アップデート
 
ASP. NET Core 汎用ホスト概要
ASP. NET Core 汎用ホスト概要ASP. NET Core 汎用ホスト概要
ASP. NET Core 汎用ホスト概要
 
AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)
 
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
 
Development tools for WordPress
Development tools for WordPressDevelopment tools for WordPress
Development tools for WordPress
 
20050917
2005091720050917
20050917
 
JAWS-UG Meets Windows (JAWS Days 2017)
JAWS-UG Meets Windows (JAWS Days 2017)JAWS-UG Meets Windows (JAWS Days 2017)
JAWS-UG Meets Windows (JAWS Days 2017)
 
SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理
SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理
SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理
 
Windows 開発者のための Dev&Ops on AWS
Windows 開発者のための Dev&Ops on AWSWindows 開発者のための Dev&Ops on AWS
Windows 開発者のための Dev&Ops on AWS
 
フロントエンド開発環境
フロントエンド開発環境フロントエンド開発環境
フロントエンド開発環境
 
[Microsoft Tech Summit] Linux/Java にも対応! Azure Service Fabric を使ったマイクロサービス開発
[Microsoft Tech Summit] Linux/Java にも対応! Azure Service Fabric を使ったマイクロサービス開発[Microsoft Tech Summit] Linux/Java にも対応! Azure Service Fabric を使ったマイクロサービス開発
[Microsoft Tech Summit] Linux/Java にも対応! Azure Service Fabric を使ったマイクロサービス開発
 
WebSphere Application Server V8.5.5 Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51
WebSphere Application Server V8.5.5Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51WebSphere Application Server V8.5.5Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51
WebSphere Application Server V8.5.5 Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51
 

Mehr von 小野 修司 (20)

20140322
2014032220140322
20140322
 
20121215
2012121520121215
20121215
 
20120616
2012061620120616
20120616
 
20120609
2012060920120609
20120609
 
20120425
2012042520120425
20120425
 
20120128
2012012820120128
20120128
 
20111203
2011120320111203
20111203
 
20110607
2011060720110607
20110607
 
20100313
2010031320100313
20100313
 
20100224
2010022420100224
20100224
 
20100218 lt
20100218 lt20100218 lt
20100218 lt
 
20100218
2010021820100218
20100218
 
20091207
2009120720091207
20091207
 
20090711
2009071120090711
20090711
 
20090606
2009060620090606
20090606
 
20090418
2009041820090418
20090418
 
20090212
2009021220090212
20090212
 
20080630
2008063020080630
20080630
 
20080627 2
20080627 220080627 2
20080627 2
 
20080627 1
20080627 120080627 1
20080627 1
 

20090328

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