PDF 形式

T3-333
ASP.NET 2.0 新機能 詳細
(パート2)
マイクロソフト株式会社
ビジネスパートナー営業本部
SE部 第1グループ
平井昌人
Agenda
パート1
8/4(Thu) 14:55@RoomA
What's New
管理機能
開発環境
データアクセス
マスターページ
サイトナビゲーション
パート2
8/5(Fir) 9:00@RoomA
スキン&テーマ
メンバシップ
パーソナライゼーション
キャッシング
サーバーコントロール
その他いろいろ
テーマ & スキン
テーマ& スキン
~ ページのルック&フィールを柔軟に変更する仕組み ~
既定のページ
テーマフォルダ
App_Theme フォルダ
「テーマ名 = サブフォルダ」 というルール
各テーマフォルダ内のファイル
スキンファイル(*.skin) : Web コントロール
スタイルシート(*.css) : HTML要素
テーマの適用
テーマを適用するだけで外観を変更!
春バージョン
夏バージョン
秋バージョン
<%@ Page Theme="summer" Language=
冬バージョン
ページ単位の適用
ディレクティブ
Theme プロパティ
サイト全体の適用
Web.config
スタイルの適用順
~ スタイルシート → プロパティ → テーマ ~
スタイルの適用順
スタイルシートテーマ
<%@ Page StyleSheetTheme = "MyStyle"
リンクスタイルシート / インラインスタイル
<link href = "StyleSheet.css" ...
<Style> input {background-color:red} </Style>
テーマ:スタイルシート
<%@ Page Theme = "MyTheme"
コントロールのプロパティ
<asp:TextBox ID="TextBox1" BaclColor="Red"
テーマ:スキンファイル
<%@ Page Theme = "MyTheme"
プログラムでの指定
TextBox1.BackColor = Color.Red
TextBox1.Style.Add("background-color", "red")
スタイルシート (~.css)
HTML 要素に適用
スタイル指定のないサーバー
コントロールにも適用
body
{
background-color:cyan
}
input
{
background-color:red
}
スキンファイル (~.skin)
サーバーコントロールのスタイル
に適用
<asp:Image runat="server"
ImageUrl="default.gif" />
<asp:TextBox runat="server"
BackColor="Red" />
動的なテーマの変更
~ テーマの変更は Page_PreInit イベントで ~
テーマの動的な変更
: PreInit イベント & Theme プロパティ
Protected Sub Page_PreInit(...) Handles Me.PreInit
Me.Page.Theme = Server.HtmlEncode(Request.QueryString("Theme"))
Me.Page.Theme = ConfigurationManager.AppSettings("DefaultTheme")
End Sub
サイト全体のテーマ
"Web.config" に記述
<system.web>
<pages theme="default" />
</system.web>
同じコントロールで違うスタイル : SkinID プロパティ
スタイルシートの class, CssClass プロパティと同じ概念
<asp:label runat="server" forecolor="black" />
<asp:label runat="server" forecolor="green" SkinID="GREEN" />
<!-- .skin -->
<asp:Label ID="Label1" runat="server" Text="黒"></asp:Label>
<!-- .aspx -->
<asp:Label ID="Label2" runat="server" Text="緑" SkinID="GREEN" ></asp:Label>
テーマ適用の防止
コントロールごとに False を設定
: EnableTheming プロパティ
メンバシップ
メンバシップ
~ ユーザー管理を簡素化するアプリケーションサービス ~
ASP.NET Membership Service
Login Controls
Login
CreateUserWizard
LoginName
Membership
MembershipUser
Membership Provider
web.config
SqlMembershipProvder
SQL Server
LoginView
PasswordRecovery
LoginStatus
Membership API
ChangePassword
SQL Server
Express
Custom Provider
Other
Databases
machine.config
Membership
Data Store
メンバシップ データベースの設定
~ "aspnet_regsql" ツール ~
SQL Server上に空のデータベースを作成しておく
"aspnet_regsql" ツールでウィザードを起動
データベースを指定するだけ
テーブル、ビュー、ストアドプロシージャ
が自動生成される
SQL Server
c:¥> aspnet_regsql
管理用テーブル
データベース選択
メンバシップの有効化
~ 『Webサイト管理ツール』で簡単設定 ~
『Webサイト管理ツール』
プロバイダの選択
『セキュリティ設定ウィザード』
アクセス方法の選択
ロールの定義
ユーザーの追加
新しいアクセス規則の追加
"Web.config"と
データベースに反映
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<roleManager enabled="true" />
<authentication mode="Forms" />
</system.web>
</configuration>
Web.configへ反映
DBへ反映
メンバシップ プロバイダ
~ 既定のプロバイダ : SqlMembershipProvider ~
設定
<membership defaultProvider="AspNetSqlMembershipProvider">
<providers>
<add name="AspNetSqlMembershipProvider"
connectionStringName="LocalSqlServer"
enablePasswordRetrieval="[true|false]"
enablePasswordReset="[true|false]"
requiresQuestionAndAnswer="[true|false]"
applicationName="/"
requiresUniqueEmail="[true|false]"
passwordFormat="[Clear|Encrypted|Hashed]"
maxInvalidPasswordAttempts="5"
passwordAttemptWindow="10"
passwordStrengthRegularExpression=""
minRequiredPasswordLength="7"
minRequiredNonalphanumericCharacters="1"
type="System.Web.Security.SqlMembershipProvider, System.Web, ...
</providers>
</membership>
独自プロバイダ
Membership クラスを継承して作成
ログインコントロール
~ ユーザー管理のほとんどがプログラムレスで実現 ~
Login
ユーザー名、パスワードを入力する標準的なUI
CreateUserWizard
新規ユーザー登録のための UI を提供
LoginView
1つのページでビューを変更
匿名、ログイン済、ロール別
に個別の UI を持てる
PasswordRecovery
メール(SMTP)で通知
文面のカスタマイズも可能
"Web.config"に<mailSettings>
<smtp>セクションを追加
パーソナライゼーション
パーソナライゼーション
~ ユーザー情報(プロファイル)管理のためのサービス ~
ASP.NET Profile Service
Profile Scheme
Web.config
<profile enabled="true">
<properties>
<add name="MyProp1" type="System.String" defaultValue="foo" />
<add name="MyProp2" type="int" defaultValue="123"/>
</properties>
</profile>
Profile API
ProfileBase
ProfileCommon
Profile Provider
web.config
SqlProfileProvider
SQL Server
SQL Server
Express
Custom Provider
Other
Databases
machine.config
Profile
Data Store
プロファイルの定義と利用
~ "Web.config" に<Profile>セクションを追加 ~
プロファイルの定義(Web.config)
既定値
<profile enabled="true">
プロパティ
<properties>
<add name="NickName" type="System.String" defaultValue="Unkown"/>
<add name="BirthDay" type="System.DateTime"/>
<group name="Home">
<add name="Address" type="System.String"/>
<add name="Phones" type="System.Collections.ArrayList"/>
</group>
</properties>
グループ化
シリアライス可能なデータ型
</profile>
プロファイルの利用
Profile クラス
通常のプロパティと同じ
Profile.NickName = "ジニアス平井"
Profile.BirthDay = DateTime.Parse("1964/04/26")
Profile.Home.Address = "xxxxx"
Profile.Home.Phones.Add("000-000-0000")
タイプセーフ
Profile.Home.Phones.Add("111-111-1111")
インテリセンス
匿名ユーザーのプロファイル
~ ログインせずとも個別化が可能 ~
匿名ユーザーのプロファイル
クライアント Cookie に一意の
ID を提供
"Web.config"での定義
<anonymousIdentification>
と allowAnonymous を追加
定期的にプロファイルを清掃
aspnet_profile テーブル
独自クラスの利用
シリアライズ可能なクラス
[App_Code]フォルダに配置
"Web.config"での定義
serializeAs="Binary"を追加
<add name="Employee"
type="Employee"
serializeAs="Binary"/>
<anonymousIdentification enabled="true"/>
<profile enabled="true">
<properties>
<add name="HandleName"
type="System.String"
allowAnonymous="true" />
</properties>
</profile>
<Serializable()> _
Public Class Employee
Private pID As Integer
Public Property ID() As Integer
Get
Return pID
End Get
Set(ByVal value As Integer)
pID = value
End Set
End Property
End Class
キャッシング
ディスク アウトプットキャッシュ
~ メモリ内のキャッシュデータをディスクに退避させる仕組み ~
IIS, アプリケーションを再起動してもキャッシュが有効
常にディスクに保存されるわけではない
メモリ要件、使用状況、再起動時など必要に応じてディスクに退避
path で指定したフォルダの下に diskchche フォルダが作成
"Web.config"の設定
有効・無効
パス
最大サイズ
ページディレクティブの設定
<caching>
<!-- Web.Config -->
<outputCache>
<diskCache enabled="true"
path="c:¥tmp"
maxSizePerApp="2"/>
</outputCache>
</caching>
<%@ OutputCache Duration="10" DiskCacheable="true" VaryByParam="none" %>
Cache API
SetSlidingExpiration メソッドで有効期間をスライディング
Duration で指定した期間内にアクセスされた場合、その時点からさらに
Duration 分を延長する効果的な機能
データベース キャッシュ
~ データベースの変更時にキャッシュをクリアさせる ~
Polling ベース
: SQL Server 7.0 / 2000
"asp_regsql.exe" で該当DBとテーブルを有効化
C:¥> aspnet_regsql -S "(local)" -E -ed -d "MyDB" -et -t "MyTable"
"Web.config"を設定
ページキャッシュ
<sqlCacheDependency enabled="true">
<databases>
<add name="MyDB" connectionStringName="CON_STR"
pollTime="10000" />
</databases>
</sqlCacheDependency>
<%@ OutputCache SqlDependency="MyDB:MyTable"
データキャッシュ (コントロール)
DataSource.SqlDependency = "MyDB:MyTable"
IIS
キャッシュ
Notification ベース : SQL Server 2005
テーブルの変更時に通知される
SqlDependency="CommandNotification"
データの変更
でキャッシュ
をクリア
データの変更
SQL Server
フラグメントキャッシュ
~ ページキャッシュでその一部を動的なコンテンツにする ~
指定部分をページキャッシュから除外
1.x では動的な箇所をユーザーコントロールで代替
フラグメントキャッシュを
有効にする方法
static(Shared)なコール
バックメソッドを用意
Substitution コントロール
WriteSubstitution メソッド
Web Server
ABC
Client
ASP.NET
ABC
キャッシュ
から
XYZ
XYZ
XYZ
マージ
Protected Sub Page_Load(ByVal sender ...
Label1.Text = System.DateTime.Now
Substitution1.MethodName = "Foo"
Response.WriteSubstitution(New HttpResponseSubstitutionCallback(AddressOf Foo))
End Sub
Shared Function Foo(ByVal context As HttpContext) As String
Return System.DateTime.Now.ToLongTimeString()
End Function
サーバーコントロール
MultiView & View コントロール
~ 1つのページ内で複数のビューを提供 ~
プロパティページのタブ切替のようなオペレーションを提供
マスター/詳細の切替や入力項目が多いエントリ画面など提供する情報量
が多い場合にそれらをカテゴライズ
MultiView コントロールに複数の View コントロールを配置
常にペアで利用する
表示するビューは ActiveViewIndex プロパティで制御
MultiView.ActiveViewIndex = -1 で非表示も可能
単一の aspx で複数のページを管理する
View 内のコントロールへのアクセス方法は同じ
ページ遷移などでのセッション管理が不要
login.aspx
MultiView Control
View1
View2
login.aspx
Wizard コントロール
~ 複数ページによる一連の処理を1つのページで実現する ~
論理的な一連の流れをもつ関連ページをまとめる
ページ(aspx)は1つで OK
順番が定義された多段階フォーム
開始画面から確認、完了画面までを制御
ユーザーによる途中ページへのアクセス防止
WizardStepによるステップ管理
WizardStep = 個々のページ
StepType プロパティ
Auto : Start / Step / Finish / Complete
自動 : 開始 / Step1 / 確認 / 完了
Wizard Control
WizardStep1 : 商品選択
NewOrder.aspx
商品選択
NewOrder.aspx
発送先入力
NewOrder.aspx
確認画面
WizardStep2 : 発送先入力
WizardStep3 : 確認画面
NewOrder.aspx
WizardStep4 : 登録画面
登録画面
Validation コントロール
~ 検証対象コントロール群のグループ化が可能 ~
ValidationGroup プロパティ
ValidationGroup = "A"
検証コントロールのグループ化
送信ボタン(sumbit)が複数あるフォームで
効果あり
1.x では CauseValidation プロパティのある
ボタン系コントロールのみだった
SetForcusOnError プロパティ
バリデーションエラーが発生した
コントロールに自動フォーカス
エラー箇所に
フォーカス移動
ただしエラーメッセージと発生した
コントロールの位置関係に注意
CultureInvariantValues プロパティ
各国の書式に対応したバリデーション
ValidationGroup = "B"
2005/01/01 でも 01/01/2005 でも OK となる
CompareValidator の ValueToCompare や
RangeValidator の MaximumValue / MinimumValue に有効
その他
クロスページ ポストバック
~ 自分自身でなくても OK ~
ポスト先の URL を変更可能
CLIENT
SERVER
IE に表示される URL も変更される
PostBackUrl プロパティで指定
Page1.aspx
Server.Transfer メソッド不要
PreviousPageType ディレクティブ
ポスト先でもタイプセーフ
Page2.aspx
PreviousPage プロパティで前ページ参照
<!-- Page1.aspx -->
<asp:Button ID="Button1" runat="server" PostBackUrl="~/Page2.aspx" Text="送信"/>
'' Page2.aspx.vb
Protected Sub Page_Load(ByVal ...
If Page.IsCrossPagePostBack Then
Label1.Text = CType(Page.PreviousPage.FindControl("TextBox1"), TextBox).Text
Me.Header.Title = Page.PreviousPage.TextBox1.Text
End If
End Sub
クライアントコールバック
~ ブラウザベースで非同期処理なるものを実現 ~
XML-HTTP でサーバーとの通信を行う
CLIENT
対応ブラウザ
SERVER
Script
ポストバックを使用しない
チラツキ防止
帯域の節約
パフォーマンス向上
ASP.NET
IE 5.0以降、NS 6.0以上、…
SupportsXmlHttp と SupportsCallback をチェック
ICallbackEventHandler.RaiseCallbackEvent メソッドを定義
Public Function RaiseCallbackEvent(ByVal ea As String) As String
Implements ICallbackEventHandler.RaiseCallbackEvent
Return "Hello"
End Function
<script language="javascript">
function ClientCallback(result, context){
document.forms[0].elements['TextBox1'].value = result; }
function ClientCallbackError(result, context){ alert(result); }
</script>
その他いろいろ
~ 細かいところにまで改良が加えられている ~
ページヘッダの操作
Page.Headrer から
アクセス可能
タイトルやMetaデータの
追加・変更など
Dim meta As New HtmlMeta()
meta.HttpEquiv = "REFRESH"
meta.Content = "2"
Page.Header.AddParsedSubObject(meta)
Page.Header.Title = Now.ToLongTimeString()
<%$ ....... %> Expression シンタックス
コンテンツ内で 構成ファイルやリソースにアクセスするための書式
<asp:SqlDataSource ID="SqlDataSource1"
ConnectionString='<%$ connectionStrings:MyDB %>' runat="server" />
<asp:Label ID="Label1" Text='<%$ Resources:WelcomeMessage %>' />
プリコンパイル (aspnet_compiler)
実行時エラーを未然に防ぐ
コードおよび ASPX の隠蔽 (空のaspxファイルとDLLだけ)
初回起動時のパフォーマンス向上 ※
c:¥>aspnet_compiler -v /demo -p "c:¥demo" "c:¥Inetpub¥wwwroot¥demo" -f
おわりに
関連セッション
T3-330
「64bit環境における.NET Frameworkアプリケーションの開発」
T3-332
「ASP.NET 2.0 新機能 詳細 (パート1)」
T2-315
「VS 2005とASP.NET 2.0を利用したWebサービスの開発」
T3-334
「IIS 6.0とASP.NETによるセキュアなWebサーバーの構築と運用」
T3-382
「ASP.NET 2.0におけるWeb パーツ開発」
技術情報リソース
ASP.NET Community Site
http://www.asp.net/
ASP.NET 2.0 Quickstart Tutorial
http://beta.asp.net/QuickStartv20/aspnet/
ASP.NET Developer Center
http://msdn.microsoft.com/asp.net/
http://www.microsoft.com/japan/msdn/asp.net/
http://msdn.microsoft.com/asp.net/beta2/default.aspx
Summary
ASP.NET 2.0 は、多くのカスタマーからのフォードバック
をもとに改良を加え、また数々の新機能やサービスを取
り入れました。定型的な処理に関しては、そのほとんどが
プログラムせずに実現できるようになっています。もちろ
ん、各新機能の API を利用して高度にカスタマイズする
ことも引き続き可能です。また、管理・運用面での強化も
図られており、ASP.NETは新たなレベルでの進化を成し
遂げたと言えます。
ASP.NET 2.0 を利用した Web ソリューションがみなさま
のビジネスのお役に立てることを心より願っております。
T3-333
ASP.NET 2.0 新機能 詳細 (パート2)
皆様のフィードバックを!
セッションアンケートに御協力下さい。
Thanks for Attending !
© 2005 Microsoft Corporation. All rights reserved.
This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.