4

このjsonファイルからデータをクエリするWebサービスがありますが、Webサービスが毎回ファイルにアクセスする必要はありません。Webサービスが次に同じデータをクエリしようとしたときに、そこからデータを取得できるように、データを別の場所(おそらくメモリ)に格納できるのではないかと考えています。何をする必要があるのか​​は理解できますが、実際にどのように行うのかわかりません。Webサービスでデータを永続化するにはどうすればよいですか?

更新: 静的変数のキャッシュと使用の両方の提案は、見栄えがします。たぶん、最初に1つを確認できるように両方を使用する必要があります。そこにない場合は、2つ目を使用します。どちらにも含まれていない場合は、jsonファイルを確認します。

4

4 に答える 4

5

Ice^^Heatのアイデアを拡張して、どこにキャッシュするかを考えたいと思うかもしれません - 次のようにアプリケーションキャッシュに json ファイルの内容をキャッシュします:

Context.Cache.Insert("foo", _
                 Foo, _
                 Nothing, _
                 DateAdd(DateInterval.Minute, 30, Now()), _
                 System.Web.Caching.Cache.NoSlidingExpiration)

そして、ヒットごとに必要な結果を生成します。または、関数定義で Web サービスの出力をキャッシュすることもできます。

<WebMethod(CacheDuration:=60)> _
Public Function HelloWorld() As String
    Return "Hello World"
End Function

XML Web Service Caching Strategiesから収集された情報。

于 2008-08-15T00:32:04.923 に答える
3

グローバルまたは静的コレクション オブジェクトの使用についてはどうでしょうか。それは良い考えですか?

于 2008-08-14T23:39:07.497 に答える
2

ASP.NETキャッシングはWebサービスでも同様に機能するため、http://msdn.microsoft.com/en-us/library/aa478965.aspxで説明されているように通常のキャッシングを実装できます。

于 2008-08-14T23:29:27.500 に答える
2

klughingをエコーするために、JSON データが頻繁に変更されることが予想されない場合、それをキャッシュする最も簡単な方法は、何らかの静的コレクション (おそらく DataTable) を使用することだと思います。

まず、JSON データを解析して System.Data.DataTable にし、Web サービス クラスで静的にします。次に、静的オブジェクトにアクセスします。IIS がアプリケーション プールをリサイクルするまで、データはキャッシュされたままになります。

public class WebServiceClass
{
    private static DataTable _myData = null;
    public static DataTable MyData
    {
        get
        {
            if (_myData == null)
            {
                _myData = ParseJsonDataReturnDT();
            }
            return _myData;
        }
    }

    [WebMethod]
    public string GetData()
    {
        //... do some stuff with MyData and return a string ...
        return MyData.Rows[0]["MyColumn"].ToString();
    }
}
于 2008-08-15T02:36:03.660 に答える