2008-08-14 2 views
4

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

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

ответ

6

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

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

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

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

информация собранная из XML Web Service Caching Strategies.

3

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

2

Чтобы получить эхо 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(); 
    } 
} 
Смежные вопросы