- - PR -
AJAXサーバー側関数でのデータキャッシュについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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度目からのアクセスではキャッシュから読取りたいのですが… 何卒ご教授いただけたら光栄です。 よろしくお願いいたします。 | ||||
|
投稿日時: 2007-12-18 20:07
そのまま Cashe というクラスがあったと思います。 が、そのクラスが適用できるかどうかは、よく説明書きを読んでください。 | ||||
|
投稿日時: 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-19 14:24
自己解決しましたので報告させて頂きます。
「HttpContext.Current.Cache」と指定することで目的を果たすことが出来ました。 そもそもResponseオブジェクトそのものもウォッチすると以下のようなエラーとなっていまして これをヒントに調べたら、回答を導き出すことが出来ました。 ---------------------------------------------------------------------------------------------------- +response {"このコンテキストでは応答が有効ではありません。"} System.Web.HttpResponse ---------------------------------------------------------------------------------------------------- まだまだ勉強不足で、本当のところの意味は掴めていませんが、後学のため この辺のところでカラクリ等ご存知の方がいらっしゃいましたらお時間の許す限りで 追記をして頂けると助かります。 以上です。ありがとうございました。 | ||||
|
投稿日時: 2007-12-19 18:46
「普通に」と言われても、そのクラスを知らなかった人が、使ったことがないものをどの様に使おうとしたのかわからないので、答えることはできません。 あなたの隣にいる人なら、「見せて」と言って、あなたが説明しなくても、あなたがしたことを知ることができるでしょう。しかし、Webではそんなことはできません。あなたの説明がすべてです。 読んでいる人に、あなたがしたことを詳細に伝えてください。 いらない情報を落とすことはできます。しかし、もらえなかった情報を作ることはできません。 | ||||
|
投稿日時: 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