лучший способ сохранить данные в .NET Web Service
У меня есть веб-служба, которая запрашивает данные из этого json-файла, но я не хочу, чтобы веб-служба каждый раз обращалась к файлу. Я думаю, что, возможно, я смогу сохранить данные где-нибудь еще (возможно, в памяти), чтобы веб-служба могла просто получить данные оттуда в следующий раз, когда она попытается запросить те же данные. Я вроде понимаю, что нужно сделать, но просто не знаю, как это сделать на самом деле. Как сохранить данные в веб-сервисе?
Обновление: оба предложения, кеширование и использование статических переменных, выглядят хорошо. Возможно, мне просто следует использовать оба, чтобы я мог сначала посмотреть на один, а если его нет, использовать второй, если его тоже нет, тогда я посмотрю файл json.
Ответов (4)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