- PR -

AJAXサーバー側関数でのデータキャッシュについて

1
投稿者投稿内容
まぼっち
会議室デビュー日: 2007/12/18
投稿数: 4
投稿日時: 2007-12-18 16:56
いつもお世話になってます。
質問させて頂きます。

開発環境 VisualStudio2005
DB SQLServer2005

Ajax.dllを使用しています。
サーバーサイドにデータセット(データテーブル等)を
キャッシュする方法はあるのでしょうか?

<Ajax.AjaxMethod()> _
Public Function myfunc(ByVal para As String) As ... _
     :
dim dt as datatable = (ここにDBからデータを読む処理)
(ここでWEBサーバーにキャッシュしたい… 理想例 : Cache.Insert("__KEYNAME", dt))
     :
End Function

出来れば2度目からのアクセスではキャッシュから読取りたいのですが…
何卒ご教授いただけたら光栄です。
よろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-12-18 20:07
引用:

まぼっちさんの書き込み (2007-12-18 16:56) より:
いつもお世話になってます。
質問させて頂きます。

開発環境 VisualStudio2005
DB SQLServer2005

Ajax.dllを使用しています。
サーバーサイドにデータセット(データテーブル等)を
キャッシュする方法はあるのでしょうか?

<Ajax.AjaxMethod()> _
Public Function myfunc(ByVal para As String) As ... _
     :
dim dt as datatable = (ここにDBからデータを読む処理)
(ここでWEBサーバーにキャッシュしたい… 理想例 : Cache.Insert("__KEYNAME", dt))
     :
End Function

出来れば2度目からのアクセスではキャッシュから読取りたいのですが…
何卒ご教授いただけたら光栄です。
よろしくお願いいたします。


そのまま Cashe というクラスがあったと思います。
が、そのクラスが適用できるかどうかは、よく説明書きを読んでください。
まぼっち
会議室デビュー日: 2007/12/18
投稿数: 4
投稿日時: 2007-12-19 08:23
普通にCacheを使用しようとすると、

  "キャッシュを使用できません。"

といったエラーとなってしまいます。
ちなみにCacheをウォッチしてみると以下の通りとなります。
----------------------------------------------------------------------------------------------------
- Cache {"キャッシュを使用できません。"} System.Web.Caching.Cache
+ Data {System.Collections.ListDictionaryInternal} System.Collections.IDictionary
ErrorCode -2147467259 Integer
HelpLink Nothing String
InnerException Nothing System.Exception
Message "キャッシュを使用できません。" String
Source "System.Web" String
StackTrace " 場所 System.Web.UI.Page.get_Cache()" String
+ TargetSite {System.Reflection.RuntimeMethodInfo} System.Reflection.MethodBase
----------------------------------------------------------------------------------------------------
まぼっち
会議室デビュー日: 2007/12/18
投稿数: 4
投稿日時: 2007-12-19 14:24
自己解決しましたので報告させて頂きます。

「HttpContext.Current.Cache」と指定することで目的を果たすことが出来ました。


そもそもResponseオブジェクトそのものもウォッチすると以下のようなエラーとなっていまして
これをヒントに調べたら、回答を導き出すことが出来ました。
----------------------------------------------------------------------------------------------------
+response {"このコンテキストでは応答が有効ではありません。"} System.Web.HttpResponse
----------------------------------------------------------------------------------------------------

まだまだ勉強不足で、本当のところの意味は掴めていませんが、後学のため
この辺のところでカラクリ等ご存知の方がいらっしゃいましたらお時間の許す限りで
追記をして頂けると助かります。

以上です。ありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-12-19 18:46
引用:

まぼっちさんの書き込み (2007-12-19 08:23) より:
普通にCacheを使用しようとすると、

  "キャッシュを使用できません。"

といったエラーとなってしまいます。
ちなみにCacheをウォッチしてみると以下の通りとなります。


「普通に」と言われても、そのクラスを知らなかった人が、使ったことがないものをどの様に使おうとしたのかわからないので、答えることはできません。


あなたの隣にいる人なら、「見せて」と言って、あなたが説明しなくても、あなたがしたことを知ることができるでしょう。しかし、Webではそんなことはできません。あなたの説明がすべてです。

読んでいる人に、あなたがしたことを詳細に伝えてください。
いらない情報を落とすことはできます。しかし、もらえなかった情報を作ることはできません。
まぼっち
会議室デビュー日: 2007/12/18
投稿数: 4
投稿日時: 2007-12-20 09:16
言葉足らずで大変失礼しました。

私自身も勉強不足で(文中)至らないところがあるかと思いますが、
出来る範囲で補足させて頂きます。

「普通にCacheを使用しようとしたら…」の真意は、

VS2005でWebFormを作成し、PageLoad等の関数内で、
「Cache」と入力すると、参照設定が間違っていなければ
通常スニペットによる補間で、例えば以下のように入力することが出来ます。


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
   Cache.Insert("_KEY_", "OBJECT")
End Sub

これはAjax.dllを使用し、作ったサーバー側のFunction内でも同様に
スニペットによる補間で問題なく入力できました。

<Ajax.AjaxMethod()> _
Public Function fncAjaxCallBack(ByVal par As String) As String
   Cache.Insert("_KEY_", "OBJECT")
End Function

が実際に動作させてみると、最初の質問でさせて頂いたとおりのエラーとなり
原因が解らずに困っていた次第であります。

結果からすると
  × System.Web.Caching.Cache
  ○ HttpContext.Current.Cache
となったのですが、本当のところで上手くいった理由は解っておりません。

以上ですが、文中過不足などございましたらまた御指摘頂けたらと思います。
1

スキルアップ/キャリアアップ(JOB@IT)