лучший способ сохранить данные в .NET Web Service

У меня есть веб-служба, которая запрашивает данные из этого json-файла, но я не хочу, чтобы веб-служба каждый раз обращалась к файлу. Я думаю, что, возможно, я смогу сохранить данные где-нибудь еще (возможно, в памяти), чтобы веб-служба могла просто получить данные оттуда в следующий раз, когда она попытается запросить те же данные. Я вроде понимаю, что нужно сделать, но просто не знаю, как это сделать на самом деле. Как сохранить данные в веб-сервисе?

Обновление: оба предложения, кеширование и использование статических переменных, выглядят хорошо. Возможно, мне просто следует использовать оба, чтобы я мог сначала посмотреть на один, а если его нет, использовать второй, если его тоже нет, тогда я посмотрю файл json.

Ответов (4)

Решение

Расширяя идею Ice ^^ Heat , вы можете подумать о том, где вы будете кэшировать - либо кешируйте содержимое json-файла в кеш приложения, например, так:

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

И затем генерируйте требуемые результаты при каждом ударе. В качестве альтернативы вы можете кэшировать вывод веб-службы в определении функции:

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

Информация собрана из Стратегии кэширования веб-служб XML .

Чтобы повторить глупость , если не ожидается, что ваши данные JSON будут часто меняться, я думаю, что самый простой способ кэшировать их - использовать какую-либо статическую коллекцию - возможно, DataTable.

Сначала проанализируйте данные JSON в System.Data.DataTable и сделайте их статическими в классе веб-службы. Затем получите доступ к статическому объекту. Данные должны оставаться в кэше до тех пор, пока 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();
    }
}

Кэширование ASP.NET работает так же хорошо с веб-службами, поэтому вы можете реализовать обычное кеширование, как описано здесь: http://msdn.microsoft.com/en-us/library/aa478965.aspx

А как насчет использования глобального или статического объекта коллекции? Это хорошая идея?