лучший способ сохранить данные в .NET Web Service - PullRequest
4 голосов
/ 15 августа 2008

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

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

Ответы [ 4 ]

5 голосов
/ 15 августа 2008

Распространение идеи 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 .

3 голосов
/ 15 августа 2008

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

2 голосов
/ 15 августа 2008

Если повторить klughing , если ваши данные 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();
    }
}
2 голосов
/ 15 августа 2008

Кэширование ASP.NET также хорошо работает с веб-сервисами, поэтому вы можете реализовать обычное кэширование, как описано здесь:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...