[HOWTO] Visual C# .NET を使用して ASP.NET でデータ キャッシュのキー依存関係を実装する

文書翻訳 文書翻訳
文書番号: 308147 - 対象製品
この記事は、以前は次の ID で公開されていました: JP308147
すべて展開する | すべて折りたたむ

目次

概要

この資料では、Microsoft ASP.NET アプリケーションでキー依存関係を使用して、データ キャッシュを実装する方法について説明します。この資料に記載されている例では、DataSet オブジェクトを作成し、別のキャッシュ エントリ アイテムへの依存関係 (そのキャッシュ エントリ アイテムのキーを参照することにより設定されています) を使用して、DataSet オブジェクトをキャッシュに挿入します。時間またはファイル依存関係によるデータ キャッシュの例については、「関連情報」を参照してください。

必要条件

  • Microsoft Windows 2000 または Microsoft Windows XP
  • Microsoft Internet Information Server (IIS)
  • Microsoft .NET Framework
  • Microsoft SQL Server

ASP.NET Web アプリケーションの作成

Microsoft Visual C# .NET を使用して DataCacher という名前の Microsoft ASP.NET Web アプリケーションを作成します。以下の手順を実行します。
  1. Microsoft Visual Studio .NET を起動します。
  2. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
  3. [新しいプロジェクト] ダイアログ ボックスで [プロジェクトの種類] ボックスの一覧の [Visual C# プロジェクト] をクリックし、[テンプレート] ボックスの一覧の [ASP.NET Web アプリケーション] をクリックします。
  4. [場所] ボックスで、URL パスのデフォルト名 "WebApplication#" を、新しいプロジェクト名 DataCacher に置き換えます。ローカル サーバーを使用する場合は、サーバー名を http://localhost のまましておくことができます。この場合、プロジェクトの場所が http://localhost/DataCacher に設定されます。

Web フォームのビルド

: 関連するコードの詳細については、後の「コードの実行」を参照してください。

データ キャッシュのサンプルをビルドするには、以下の手順を実行します。
  1. Visual Studio .NET のプロジェクトに、DataCacheSample.aspx という名前の新しい Web フォームを追加します。以下の手順を実行します。
    1. ソリューション エクスプローラでプロジェクト ノードを右クリックします。
    2. [追加] をポイントし、[Web フォームの追加] をクリックします。
    3. Web フォームに DataCacheSample.aspx という名前を付けます。
    4. [開く] をクリックします。
  2. Visual Studio .NET 統合開発環境 (IDE) のデザイン ビューで、Web フォーム Button コントロールをページに追加します。以下の手順を実行します。
    1. ツールボックスの [Web フォーム] タブから、[Button] コントロールをページ上にドラッグ アンド ドロップします。
    2. 新しいボタンをクリックします。(ID) プロパティを CreateNewOrCached に変更し、Text プロパティを新しいデータセットの作成またはキャッシュ済みに変更します。
  3. 2 つ目の Web フォーム Button コントロールを追加します。以下の手順を実行します。
    1. ツールボックスの [Web フォーム] タブから、2 つ目の [Button] コントロールをページ上にドラッグ アンド ドロップします。
    2. 新しいボタンをクリックします。(ID) プロパティを Remove に変更し、Text プロパティを削除に変更します。
  4. Web フォーム Label コントロールを追加します。以下の手順を実行します。
    1. ツールボックスの [Web フォーム] タブから、[Label] コントロールをページ上にドラッグ アンド ドロップします。
    2. 新しいラベルをクリックします。(ID) プロパティを CacheStatus に変更し、Text プロパティをクリアします。
  5. ツールボックスの Web フォームから、DataGrid コントロールをページ上にドラッグ アンド ドロップします。プロパティ ウィンドウで、このコントロールの (ID) プロパティをデフォルト設定の DataGrid1 に設定します。

コードの追加

キャッシュ アイテムの挿入と削除、およびキャッシュの依存関係を作成するコードを追加します。以下の手順を実行します。
  1. .aspx ページを右クリックし、[コードの表示] をクリックしてコード ビハインド ページを開きます。
  2. このサンプルを使用するには、System.Data.SqlClient、System.Data、および System.Web.Caching の各名前空間が、コード ビハインド ページの名前空間の一覧に追加されていることを確認します。Visual Studio . NET を使用して Web フォームを作成している場合、コード ビハインド ページの名前空間の一覧は以下のようになります。
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;
    using System.Web.Caching;
    						
    : いずれかの名前空間が一覧にない場合、または重複して指定されている名前空間がある場合は、警告メッセージが表示される場合があります。
  3. デザイン ビューで、[新しいデータセットの作成またはキャッシュ済み] ボタンをダブルクリックして CreateNewOrCached_Click イベントをコード ビハインド ページに表示します。
  4. 次のコードを CreateNewOrCached_Click イベントに追加します。
    private void CreateNewOrCached_Click(object sender, System.EventArgs e) {
    	//Attempt to create a DataSet object from the cache entry with the key "CacheDataSetEmployees" 
    	object CacheDataSetEmployees = (DataSet)Cache.Get("CacheDataSetEmployees");
    	
            //Check to see if the object is null
    	if(CacheDataSetEmployees == null)
    	{
    	     //Set a value for the cache entry that will serve as the 
    	     //key for the dependency to be created on
    	     Cache["SqlPubsEmployees"] = "SomeValue";
    
    	     //Create the array of cache key item names
    	     string[] keys = new String[1];
    	     keys[0] = "SqlPubsEmployees";
    				
    	     DataSet ds = new DataSet();
    	     //Create the connection and pass in the ConnectionString
    	    SqlConnection MySqlConn = new SqlConnection("Server=kronicas17;Trusted_Connection=Yes;initial catalog=pubs");
    	     //Create the Data Adapter and pass in the command text and connection to use
    	     SqlDataAdapter MySda = new SqlDataAdapter("SELECT TOP 10 * FROM Employee", MySqlConn);
    	     //Populate the DataTable "Employees" in the DataSet
    	     MySda.Fill(ds,"Employee");
    	     //Set the DataGrid's DataSource to the "Employee" DataTable
    	     DataGrid1.DataSource = ds.Tables["Employee"];
    				
    	     //Create a dependency object referencing the array of cachekeys (keys)
    	     CacheDependency MyDependency = new CacheDependency(null, keys);
    	     //Insert the DataSet into Cache with a dependency on MyDependency
    	     Cache.Insert("CacheDataSetEmployees", ds, MyDependency);
    				MySqlConn.Close();
    				
    	     //Display the status of the DataSet/Cache Entry
    	     CacheStatus.Text = "New Version Created";
    	}
    	else
    	{
    	     //Display the status of the DataSet/Cache Entry
    	     CacheStatus.Text = "Cached Version Used";
    	     //Set the DataSource to the cached version of the DataSet
    	     DataGrid1.DataSource = CacheDataSetEmployees;
            }
            //Bind the DataGrid to the DataSource
    	DataGrid1.DataBind();
    }
    						
    : SQL Server と正常に連動させるには、この手順のコードの接続文字列を変更する必要がある場合があります。このコードが正常に動作するには、SQL Server の pubs データベースをインストールしておく必要があります。
  5. DataCacheSample.aspx のデザイン ビューで、[削除] ボタンをダブルクリックして Remove_Click イベントをコード ビハンド ページに表示します。
  6. 次のコードを Remove_Click イベントに追加します。
    private void Remove_Click(object sender, System.EventArgs e)
         {
    	//Remove the cache item listed in the cachekeys array (keys)
    	Cache.Remove("SqlPubsEmployees"); 	//Display the status of the cache item
    	CacheStatus.Text = "Cache Item Removed";
         }
    					
  7. 次の要素を Web.config ファイルの <system.web> と </system.web> の間に追加します。
    <identity impersonate=”true"/>
    			
  8. [ファイル] メニューの [すべてを保存] をクリックし、Web フォームおよびその他の関連するプロジェクト ファイルを保存します。
  9. Visual Studio .NET IDE で、[ビルド] メニューの [Project_Name のビルド] をクリックしてプロジェクトをビルドします。

コードの実行

  1. コードを実行するには、ソリューション エクスプローラで DataCacheSample.aspx ページを右クリックし、[ブラウザで表示] をクリックします。
  2. [新しいデータセットの作成またはキャッシュ済み] ボタンをクリックします。CacheStatus ラベルには、"New Version Created" と表示され、DataGrid コントロールにデータが設定されます。

    • CacheStatus ラベルに "New Version Created" と表示されるのは、イベント発生時に、キャッシュ キー CacheDataSetEmployees が有効なキャッシュ アイテムを参照していないためです。この場合、データセットが作成され、そのデータセットに DataGrid コントロールが連結されます。その後、キャッシュ キー CacheDataSetEmployees を使用して、データセットがキャッシュに登録されます。
    • 前の手順では、MyDependency という名前の新しい CacheDependency オブジェクトも作成しています。Insert メソッドを使用して CacheDataSetEmployees アイテムをキャッシュに追加するときに、そのアイテムの依存関係として MyDependency オブジェクトが指定されています。このサンプルではキー依存関係の例を示していますが、ファイルやタイム スタンプなど、他の種類の依存関係によるキャッシュ条件も同様に使用できます。
  3. もう一度 [新しいデータセットの作成またはキャッシュ済み] ボタンをクリックします。CacheStatus ラベルに "Cached Version Used" と表示され、キャッシュ済みのデータセットが使用されたことが示されます。SQL クエリ アナライザや他のツールを使用して、pubs データベース内の、表示されているいずれかのレコードを変更することにより、キャッシュ済みのデータであることを確認できます。レコードを変更したら、もう一度 [新しいデータセットの作成またはキャッシュ済み] をクリックします。変更内容は表示されません。データベースに加えた変更を表示するには、[削除] をクリックし、もう一度 [新しいデータセットの作成またはキャッシュ済み] をクリックします。
  4. [削除] ボタンをクリックします。CacheStatus ラベルに "Cache Item Removed" と表示されます。Remove_Click イベントの Cache.Remove メソッドによって、キーが SqlPubsEmployees であるキャッシュ アイテムが削除されます。MyDependency を作成するときに、MyDependency に配列 (削除されるアイテムのキャッシュ キー名を含みます) を指定し、また CacheDataSetEmployees アイテムを作成するときに、Insert メソッドで依存関係パラメータとして MyDependency を参照しているため、CacheDataSetEmployees アイテムが削除されます。
  5. [新しいデータセットの作成またはキャッシュ済み] ボタンを再度クリックします。イベント発生時にキャッシュ内にアイテムが存在しない状態でデータセットが作成されるため、CacheStatus ラベルにはメッセージ "New Version Created" が表示されます。
  6. また、DataSet アイテムがキャッシュから削除された後でも、DataGrid コントロールはデータが設定された状態で表示されます。これは、デフォルトで EnableViewState プロパティが True に設定されているためです。この設定によってコントロールの状態が保持されます。これはコード内でのキャッシュ エントリの操作とは関係ありません。各段階でのコントロールの状態をさらに視覚的に表示するために、EnableViewState を False に設定できます。
: 実際の状況では、キャッシュ キーの配列 (サンプル コードでの keys 配列) には、他のテーブルまたは他のキャッシュ アイテムのキャッシュ キーが格納される場合もあります。これにより、これらのいずれかのアイテムが変更された場合に、この依存関係を指定して作成されたアイテムのキャッシュ エントリ (このサンプルでは CacheDataSetEmployees) も、キャッシュから削除されます。その後、コールバックを使用して必要な処理を実行できます。コールバックの詳細については、この資料の「関連情報」を参照してください。

トラブルシューティング

  • キャッシュ キーの配列のキー名は、実際のキャッシュ アイテムに関連付けられる必要があります。正しく関連付けられていない場合、依存関係が使用されるアイテムは、キャッシュ内で適切に保持されません。たとえば、このサンプル コード内の keys 配列に別の配列要素が格納され、その要素に無効なキャッシュ キー名が設定されている場合などです。
  • キャッシュ キーの配列は、CacheDependency オブジェクトで使用されるまでは、特定の意味を持ちません。
  • 依存関係やその他の有効期限を持たないアイテムをキャッシュに挿入した場合、アイテムがキャッシュから削除されるタイミングはランタイムによって制御されます。

関連情報

ファイル ベースの依存関係については、次のマイクロソフト Web サイトを参照してください。
ページのデータ キャッシュ
http://ja.gotdotnet.com/quickstart/aspplus/doc/datacaching.aspx
CacheItemRemovedCallback デリゲートの使用に関する詳細については、次のマイクロソフト Web サイトを参照してください。
CacheItemRemovedCallback デリゲート
http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfsystemwebcachingcacheitemremovedcallbackclasstopic.asp
: CacheItemRemovedCallback デリゲートでは、キャッシュされているアイテムがキャッシュから削除されたときに、アプリケーションに通知するコールバック メソッドを定義します。

CacheDependency クラスの詳細については、次のマイクロソフト Web サイトを参照してください。
CacheDependency クラス
http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfsystemwebcachingcachedependencyclasstopic.asp
: CacheDependency クラスは、キャッシュの依存関係を追跡します。追跡対象として、ファイル、ディレクトリ、アプリケーションのキャッシュ内にある他のオブジェクトへのキーを指定できます。

ASP.NET で使用できる各種のキャッシュ オプションについて参照するには、次の Microsoft .NET Framework SDK ドキュメントをクリックしてください。
キャッシュへのアイテムの追加
http://msdn.microsoft.com/library/ja/cpguide/html/cpconAddingItemsToCache.asp
ASP.NET で使用できるさまざまなキャッシュ オプションの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
305140 ASP.NET ロードマップ
307225 [INFO] ASP.NET のキャッシュについて

プロパティ

文書番号: 308147 - 最終更新日: 2005年11月2日 - リビジョン: 2.5
この資料は以下の製品について記述したものです。
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
キーワード:?
kbcaching kbdatabase kbhowtomaster KB308147
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com