лучший способ сохранить данные в веб-службе .NET
-
08-06-2019 - |
Вопрос
У меня есть веб-служба, которая запрашивает данные из этого файла 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();
}
}