Вопрос

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

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

Это было полезно?

Решение

Распространяющийся на Лед^^Теплопо идее, вам, возможно, захочется подумать о том, где вы будете кэшировать - либо кэшировать содержимое файла 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.

Другие советы

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

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

Отдавать эхо клафинг, если ожидается, что ваши данные 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();
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top