Visual Basic .NET を使用して ASP.NET でデータ キャッシュのキー依存関係を実装する方法

文書翻訳 文書翻訳
文書番号: 312358 - 対象製品
この記事は、以前は次の ID で公開されていました: JP312358
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
すべて展開する | すべて折りたたむ

目次

概要

この資料では、ASP.NET アプリケーションでデータ キャッシュのキー依存関係を実装する方法について、手順を追って説明します。

この資料に記載されている例では、DataSet オブジェクトを作成し、別のキャッシュ エントリ アイテムのキーを参照することにより、そのキャッシュ エントリ アイテムへの依存関係が設定された DataSet オブジェクトを、キャッシュに挿入します。時間依存関係またはファイル依存関係によるデータ キャッシュの例については、関連情報を参照してください。


必要条件

必要なハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および Service Pack は次のとおりです。
  • Microsoft Windows 2000 または Microsoft Windows XP
  • Microsoft インターネット インフォメーション サービス (IIS)
  • Microsoft .NET Framework
  • Microsoft SQL Server

Visual Basic .NET を使用して ASP.NET Web アプリケーションを作成する

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

Web フォームをビルドする

: 関連情報については、後の「コードの実行」を参照してください。
  1. Visual Studio .NET のプロジェクトに、DataCacheSample.aspx という名前の新しい Web フォームを追加します。これを行うには、以下の手順を実行します。
    1. ソリューション エクスプローラで、プロジェクトのノードを右クリックして、[追加] をポイントし、[Web フォームの追加] をクリックします。
    2. Web フォームに DataCacheSample.aspx という名前を付けて、[開く] をクリックします。
  2. Visual Studio .NET 統合開発環境 (IDE) で、デザイン ビューに切り替えます。
  3. Web フォーム ボタンをページに追加します。
    1. Web フォーム ボタンをページにドラッグします。
    2. Web フォーム ボタンを選択します。(ID) プロパティを CreateNewOrCached に変更し、Text プロパティを CreateNewOrCached に変更します。
  4. Web フォーム ボタンをもう 1 つ追加します。
    1. 別の Web フォーム ボタンをページにドラッグして [CreateNewOrCached] ボタンの右横に並べます。
    2. Web フォーム ボタンを選択します。(ID) プロパティを RemoveEntry に変更し、Text プロパティを RemoveEntry に変更します。
  5. Web フォーム ラベルを追加します。
    1. Web フォーム ラベルをツールボックスからページにドラッグします。
    2. Web フォーム ラベルを選択します。(ID) プロパティを CacheStatus に変更し、Text プロパティをクリアします。
  6. DataGrid を追加します。
    1. Web フォーム DataGrid コントロールをページにドラッグします。(ID) プロパティには、デフォルト値の DataGrid1 をそのまま使用します。

コードを追加する

キャッシュ アイテムの挿入と削除、およびキャッシュの依存関係を作成するコードを追加します。以下の手順を実行します。
  1. .aspx ページを右クリックし、[コードの表示] をクリックしてコードを表示します。
  2. 以下の名前空間を名前空間の一覧に追加します。
    Imports System.Data.SqlClient
    Imports System.Web.Caching
    						
    : 名前空間を省略したり、余分な名前空間を指定すると、警告メッセージが表示されます。
  3. デザイン ビューに切り替えます。
  4. [CreateNewOrCached] ボタンをダブルクリックして、CreateNewOrCached_Click イベントのコードを表示します。以下のコードを、CreateNewOrCached_Click イベントに追加します。

    : このコードを実行するには、SQL Server の Pubs データベースをインストールする必要があります。
         Private Sub CreateNewOrCached_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CreateNewOrCached.Click
            ' Create a DataSet object from the cache entry with the
            ' CacheDataSetEmployees key.
            Dim CacheDataSetEmployees As Object = CType(Cache.Get("CacheDataSetEmployees"), DataSet)
    
            ' Verify if the object is null.
            If (CacheDataSetEmployees Is Nothing) Then
    
                ' Set a value for the cache entry that serves as the 
                ' key for the dependency.
                Cache("SqlPubsEmployees") = "SomeValue"
    
                ' Create the array of cache key item names.
                Dim keys() As String = {"SqlPubsEmployees"}
    
    
                Dim ds As DataSet = New DataSet()
                ' Create the connection and pass in the ConnectionString.
                Dim MySqlConn As SqlConnection = New SqlConnection("Server=localhost;Database=Pubs;uid=sa;pwd=")
                ' Create the Data Adapter and pass the command text and 
                ' connection to use.
                Dim MySda As SqlDataAdapter = 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 cache 
                ' keys (keys).
                Dim MyDependency As New CacheDependency(Nothing, 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
            End If
    
            ' Bind the DataGrid to the DataSource.
            DataGrid1.DataBind()
    
        End Sub
    						
    : 使用する SQL Server で正しく実行できるように、上記のコード内の接続文字列を修正してください。
  5. DataCacheSample.aspx ページをデザイン ビューに切り替えます。
  6. [RemoveEntry] ボタンをダブルクリックして、RemoveEntry_Click イベントのコードを表示します。
  7. 以下のコードを、RemoveEntry_Click イベントに追加します。
    Private Sub RemoveEntry_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RemoveEntry.Click
            ' 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"
    End Sub
    					
  8. [ファイル] メニューの [すべてを保存] をクリックして、Web フォームおよびその他の関連するプロジェクト ファイルを保存します。
  9. Visual Studio .NET 統合開発環境 (IDE) の [ビルド] メニューの [ソリューションのビルド] をクリックして、プロジェクトをビルドします。

コードを実行する

  1. ソリューション エクスプローラで、DataCacheSample.aspx ページを右クリックし、[ブラウザで表示] をクリックします。
  2. [CreateNewOrCached] ボタンをクリックします。CacheStatus ラベルには、"New Version Created" と表示され、DataGrid コントロールにデータが設定されます。

    注意事項 :
    • CacheStatus ラベルに "New Version Created" と表示されるのは、イベント発生時に、キャッシュ キー CacheDataSetEmployees が有効なキャッシュ アイテムを参照していないためです。この場合、データセットが作成され、そのデータセットに DataGrid コントロールが連結されます。その後、キャッシュ キー CacheDataSetEmployees を使用して、データセットがキャッシュに登録されます。
    • MyDependency という名前の新しい CacheDependency オブジェクトが作成されます。Insert メソッドを使用して CacheDataSetEmployees アイテムをキャッシュに追加するときに、MyDependency オブジェクトがそのアイテムの依存関係の一覧に含まれています。このサンプルでは、キー依存関係の例を示していますが、ファイルやタイムスタンプなど、他の種類の依存関係によるキャッシュ条件を使用することもできます。
  3. 再度 [CreateNewOrCached] ボタンをクリックします。

    [CacheStatus] ラベルに Cached Version Used と表示されます。これは、キャッシュ済みの DataSet が使用されることを意味します。本当にキャッシュ済みデータであるかどうかを確認するには、SQL クエリ アナライザや他のツールを使用して Pubs データベース内のいずれかのレコードを変更します。レコードを変更した後で、もう一度 [CreateNewOrCached] ボタンをクリックして、変更内容が表示されないことを確認します。[RemoveEntry] をクリックし、もう一度 [CreateNewOrCached] をクリックすると、今度はデータベースに加えた変更が表示されます。
  4. [RemoveEntry] をクリックします。

    [CacheStatus] ラベルに Cache Item Removed と表示されます。SqlPubsEmployees キーを持つキャッシュ アイテムが、RemoveEntry_Click イベントの Cache.Remove メソッドによって削除されています。MyDependency を作成するときに、削除アイテムのキャッシュ キー名を含む配列が指定されています。CacheDataSetEmployees アイテムが削除される理由は、そのアイテムを作成するときに Insert メソッドで依存関係パラメータとして MyDependency を参照しているためです。
  5. 再度 [CreateNewOrCached] をクリックします。

    [CacheStatus] ラベルに "New Version Created" と表示されます。イベント起動時にキャッシュ内にアイテムが存在しないため、データセットが作成されます。

    また、データセット アイテムがキャッシュから削除された後でも、DataGrid コントロールはデータが設定された状態で表示されます。これは、デフォルトで EnableViewState プロパティが True に設定されているためです。この設定によってコントロールの状態が保持されます。これはコード内でのキャッシュ エントリの操作とは関係ありません。各段階でのコントロールの状態をさらに視覚的に表示するには、EnableViewState を False に設定します。
実際の状況では、キャッシュ キー配列 (この例では keys 配列) は、他のテーブルまたは他のキャッシュ アイテムのキャッシュ キーを保持することもできます。これらのいずれかのアイテムが変更された場合、この依存関係によって作成されたアイテムのキャッシュ エントリ (この例では CacheDataSetEmployees) が、キャッシュから削除されます。必要であれば、コールバックを使用して応答できます。コールバックの詳細については、後の「関連情報」を参照してください。

トラブルシューティング

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

関連情報

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

CacheDependency クラスの詳細については、次のマイクロソフト Web サイトを参照してください。
CacheDependency クラス
http://msdn2.microsoft.com/ja-jp/library/system.web.caching.cachedependency.aspx
CacheDependency クラスは、キャッシュの依存関係を追跡します。追跡対象として、アプリケーションのキャッシュ内にある他のオブジェクトへのキー、ファイル、フォルダなどを指定できます。

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

プロパティ

文書番号: 312358 - 最終更新日: 2014年2月24日 - リビジョン: 4.3
この資料は以下の製品について記述したものです。
  • Microsoft ASP.NET 1.0
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual Basic .NET 2003 Standard Edition
キーワード:?
kbnosurvey kbarchive kbcaching kbdatabase kbhowtomaster KB312358
"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