У меня есть веб-служба, которая запрашивает данные из этого json-файла, но я не хочу, чтобы веб-служба каждый раз обращалась к этому файлу. Я думаю, что, возможно, я могу хранить данные в другом месте (возможно, в памяти), чтобы веб-служба могла просто получить их оттуда в следующий раз, когда она попытается запросить те же данные. Я вроде бы понимаю, что нужно сделать, но не уверен, как это сделать. Как мы сохраняем данные в веб-сервисе?
Обновление: Оба предложения, кэширование и использование статических переменных, выглядят хорошо. Возможно, мне стоит использовать оба варианта, чтобы сначала посмотреть на один, и если его там нет, использовать второй, если его там тоже нет, тогда я посмотрю на json-файл.
Продолжая идею 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 Web Service Caching Strategies.
Как насчет использования глобального или статического объекта коллекции? Хорошая ли это идея?
Кэширование ASP.NET работает так же хорошо с веб-службами, поэтому вы можете реализовать обычное кэширование, как описано здесь: http://msdn.microsoft.com/en-us/library/aa478965.aspx
Повторить klughing, если Ваши данные JSON isn' t ожидал изменяться часто, я думаю, что самый простой способ припрятать его про запас состоит в том, чтобы использовать статическую коллекцию некоторого вида - возможно, DataTable.
Во-первых, разберите свои данные JSON в Систему. Данные. 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();
}
}